步骤如下:
1. 打开Mumu反编译器,点击“文件”菜单,选择“打开APK文件”选项,选择要反编译的小程序APK文件。
2. 等待Mumu反编译器完成APK文件的解析和反编译,这可能需要一些时间。
3. 反编译完成后,可以在Mumu反编译器的左侧面板中看到反编译后的文件结构。
4. 在左侧面板中找到“smali”文件夹,这是小程序的源代码文件夹。
5. 点击“smali”文件夹,可以看到小程序的代码文件,这些文件可以用文本编辑器打开查看和编辑。
需要注意的是,反编译小程序的源代码并不一定合法,因此使用反编译工具需要遵守相关法律法规。同时,反编译后的源代码可能存在一些问题,如变量名被混淆、代码结构不完整等,需要开发者自行处理。
1 对比
上传demo进行加固,解包后对比下原包和加固包,发现加固包在assets文件夹下多了libjiagu.so,libjiagu_x86,lib文件夹下多了libjiagu_art.so,同时修改了dex文件和AndroidManifest文件
打开manifest文件,看到xxx加固对Application标签做了修改,添加了壳入口,也就是我们反编译后看到的StubApplication.smali这个文件。
相比于之前版本的加固,自从1.x.x.x加固版本之后,多了几次反调试,使得动态难度稍微增大了一些,不过针对脱壳机脱壳,再多了反调试也是无用。或者通过修改系统源码,也能达到消除反调试的作用。
2 动态调试
(1)把app安装到手机,以调试模式打开app
(2)以shell模式root权限打开IDA的android_server监听
(3)tcp转发
(4)打开IDA,修改配置为在进程开始时下断
(5)搜索到进程后jdwp转发,pid值即为我们进程号,并在命令行下附加。
成功附加后,可以下段了,打开Debugger Option
我们选择在线程开始和库加载时下断,修改成功后,jdb附加,点击运行
程序会断在elf头处,按下G键,搜索mmap,在mmap函数的段首和断尾下段
F9运行,来到断尾时F8单步,
来到此处时,在 BLunk_5C999C2C下断,F9一下,F7跟进去
跟进去今后在BLX LR处进行下断,此处就是进行反调试的地方,原理依然是获取TracePid的值判断当前是不是处于调试状态,建议第一次调试的人在fgets和fopen处下断,再f7跟进此调用就可以看到TracePid的值了。
跟进去之后,我们直接把方法移到最下方,就可以看到kill符号了,这就是杀进程的地方,如果当前处于调试状态,则直接结束进程。
我们在此函数的所有cmpR0,#0处下断,F9一下后即断在断点处,观察寄存器窗口的R0值,实质就是当前的TracePid的16进制的值
不确定的可以使用cat /proc/pid/status进行对比一下,我们直接把R0置0,右键选择Zero Value即可清0,继续F9
我们看到程序又来到了mmap处,继续f9
当继续断在调用反调试功能的方法时,继续F7跟进,依然在所有的cmp R0,#0处下断,断下后把R0清0后继续F9运行
目前的规律是,调用BLXLR的第一次,第二次和第四次是进行反调试判断的,第三次并不影响,可以直接f9跳过去,三次反调试搞定后,就可以愉快的F9运行并观察堆栈窗口了
当看到出现如下所示时:
说明壳已经开始解密并释放dex文件了,我们直接F8单步十几步,最后F9一下就可以看到我们需要的dex头了
直接脚本dump出来即可,最后把libjiagu的所有文件删除,并修复下Application标,如果存在则修复,不存在删除即可
首先拿到apk,把后缀名改成.rar或者是.zip。资源全在assets里面,打开bin找到 data目录,很多乱码文件看不懂
下载 disunity
目录下有个disunity.jar,和一个disunity.bat文件 如果是0.3.4版本要自行生成jar包。
做移动端开发的,都有Java 7以上的包吧。
检测运行-cmd -Java -version 是7以上就行
找到disunity目录。把APK里面的assets文件放在同级目录。
然后在控制台输入:disunity extract assets\bin\data*.*
反编译完成之后就在同级目录下可以看到了。
注意texture里的ktx 可以用PVRtextool工具查看。
那个工具下载好之后,直接打开GUI里面的EXE 然后把KTX拖进去就行了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)