freeparty 发表于 2016-2-21 17:52:29

某加固壳的实战分析

本帖最后由 freeparty 于 2016-2-25 22:10 编辑

某加固壳的实战分析图已阵亡:访问http://bbs.fishc.com/thread-69182-1-1.html查看原帖。
工具:IDA6.1,Android Killer手机一部:特殊说明(必须安卓,Root,boot.img修改->default.prop->debuggable=1)-测试方法,链接手机后在打开cmd,输入adb jdwp,如果进程只有一两个说明手机不支持调试,需要更换设备,或修改default.prop电脑:jdk1.8环境(荐)
IDA动态调试的准备工作:      推送IDA根目录下dbgsrv->android_server到手机中,推荐放置于/system/bin/目录中,然后给android_server添加执行权限(chmod 755 目录/android_server)电脑端:运行adb shell,运行su(提升权限),然后启动android_server,如图,我这里最后一个敲的命令是an(等于android_server,然后这个窗口不要关,新开一个进行下一步)http://xxx.fishc.com/forum/201602/21/155305kqmexoe8opeo8mxe.png
然后接着敲端口转发命令:adb forward tcp:23946 tcp:23946,这句基本上不会变http://xxx.fishc.com/forum/201602/21/155653ehh703098go7ey9g.png
以调试模式启动程序:adb shell am start -D -n com.gc.materialdesigndemo/.ui.MainActivityadb shell am start -D -n 包名/主activity类名http://xxx.fishc.com/forum/201602/21/160647eb30ch5knhnzll05.png
然后开IDA,看图http://xxx.fishc.com/forum/201602/21/155852rggcsgc5h2aiajht.png
跟着图一步一步来http://xxx.fishc.com/forum/201602/21/160139c1gnn1gpfpp2ap7b.png
Debug选项,勾完点ok,回到上图时再点okhttp://xxx.fishc.com/forum/201602/21/160250wrnnn6393y9m93y9.png
选取包名,并记下进程id,然后点击okhttp://xxx.fishc.com/forum/201602/21/161138olljttak1kb1ghag.png

本帖隐藏的内容
输入命令adb forward tcp:8700 jdwp:刚刚的进程IDhttp://xxx.fishc.com/forum/201602/21/161427ajqhjpiihmipwkmw.png
按G键输入fopen,回车,按F2键下断点
然后打开模块列表,寻找libdvm.so,双击,再到libdvm.so的函数列表中寻找dvmDexFileOpenPartial函数,F2断点http://xxx.fishc.com/forum/201602/21/161918i34pzhm1thwb4p41.pnghttp://xxx.fishc.com/forum/201602/21/161921ks79njurcgmo899v.png
然后在命令行中输入 jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700jdb连接后,回到IDA中按F9运行,然后发现程序停在了fopen的位置,上图http://xxx.fishc.com/forum/201602/21/162445kbu7uvxtahk3nv3n.pnghttp://xxx.fishc.com/forum/201602/21/162549twewav8l8vnncenl.png将选中区域修改为字符0000(右键Edit,改完之后需要右键应用改变),让他fopen失败,之后F9,有异常直接pass忽略,再次停到fopen时显示的是/proc/22590/status,这时需要将中间的进程id改的走心一点,敲adb shell ps,查看当前运行的所有程序的进程id,随便找个和他同样位数的一替换就行,改完F9,如果还出现这个就继续这样改,大概四次过后,停在了dvmDexFileOpenPartial这里,看图http://xxx.fishc.com/forum/201602/21/163753ezoyfgoz0ic6uc0i.pnghttp://xxx.fishc.com/forum/201602/21/163753mn9e89xhydkf96dv.pnghttp://xxx.fishc.com/forum/201602/21/163754mxz1xahabxxbsxxm.png
然后ida->file->script-command,先复制这段脚本进去auto fp, dexAddress, end, size;
dexAddress = 0x77607640;
size = 0x19E118;
end = dexAddress + size;
fp = fopen("D:\\classes.dex", "wb");
for ( ; dexAddress < end; dexAddress++ )
fputc(Byte(dexAddress), fp);

将右边R0的值复制到dexAddress的位置,R1复制到size的位置,然后点下面的Run,稍等片刻D盘根目录下将会出现一个classes.dex文件,这就是这个apk原来的dex。http://xxx.fishc.com/forum/201602/21/165019oktk5i57itfwggck.png

至此脱壳结束




常见反调试有:**** Hidden Message *****
某公司的检测default.prop中debuggable=1就退出执行检测status文件,检测自身模块是否存在zjDroid
以及不用常规方式加载Dex到内存中。
心得体会:攻与防是不会停止的,唯有不停的学习和探索才是王道。关于捐赠:因为本人最近想要租建Web服务器,希望觉得我这篇文章写的好的鱼油可以支持一下我,数额最低不限,最大不要超过300谢谢大家的支持。支付宝:15719161076http://xxx.fishc.com/forum/201602/21/165800ku81lvwdl5s9ze99.jpg
http://bbs.fishc.com/static/image/filetype/zip.gif MaterialDesignDemo_unsign.zip (1.34 MB, 下载次数: 147)
鬼哥的论坛好像不能用附件,只有来这里下载了关于版权:刚刚有个人复制不复制全部的,那么就版权所有,禁止复制。

逆向学习菜鸟 发表于 2016-2-21 17:57:38

前来支持大牛

zbx91 发表于 2016-2-21 23:19:22

好东西,看看先啊!!!!

lies2014 发表于 2016-2-22 00:02:34

谢谢教程,脱壳的教程太少了

Sink 发表于 2016-2-22 01:00:05

图片都变叉叉了

sndncel 发表于 2016-2-22 05:50:56

谢谢分享。。。。。。这个要支持一下呀。。。。

molice 发表于 2016-2-22 10:40:43

膜拜学习

GeekCat 发表于 2016-2-22 11:27:05

谢谢分享

hhyszx 发表于 2016-2-22 15:21:37

xuexi xuexi

cynxwl 发表于 2016-2-22 15:54:10

kanxiaxiazisa
页: [1] 2 3 4 5 6
查看完整版本: 某加固壳的实战分析