本帖最后由 freeparty 于 2016-2-25 22:10 编辑
某加固壳的实战分析 图已阵亡:访问http://bbs.fishc.com/thread-69182-1-1.html查看原帖。
手机一部:特殊说明(必须安卓,Root,boot.img修改->default.prop->debuggable=1) -测试方法,链接手机后在打开cmd,输入adb jdwp,如果进程只有一两个说明手机不支持调试,需要更换设备,或修改default.prop 推送IDA根目录下dbgsrv->android_server到手机中,推荐放置于/system/bin/目录中,然后给android_server添加执行权限(chmod 755 目录/android_server) 电脑端:运行adb shell,运行su(提升权限),然后启动android_server,如图,我这里最后一个敲的命令是an(等于android_server,然后这个窗口不要关,新开一个进行下一步) 然后接着敲端口转发命令:adb forward tcp:23946 tcp:23946,这句基本上不会变 以调试模式启动程序:adb shell am start -D -n com.gc.materialdesigndemo/.ui.MainActivity adb shell am start -D -n 包名/主activity类名 本帖隐藏的内容
输入命令adb forward tcp:8700 jdwp:刚刚的进程ID 然后打开模块列表,寻找libdvm.so,双击,再到libdvm.so的函数列表中寻找dvmDexFileOpenPartial函数,F2断点 然后在命令行中输入 jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 jdb连接后,回到IDA中按F9运行,然后发现程序停在了fopen的位置,上图 将选中区域修改为字符0000(右键Edit,改完之后需要右键应用改变),让他fopen失败,之后F9,有异常直接pass忽略,再次停到fopen时显示的是/proc/22590/status,这时需要将中间的进程id改的走心一点,敲adb shell ps,查看当前运行的所有程序的进程id,随便找个和他同样位数的一替换就行,改完F9,如果还出现这个就继续这样改,大概四次过后,停在了dvmDexFileOpenPartial这里,看图 然后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。
某公司的检测default.prop中debuggable=1就退出执行 检测status文件,检测自身模块是否存在zjDroid 心得体会:攻与防是不会停止的,唯有不停的学习和探索才是王道。 关于捐赠:因为本人最近想要租建Web服务器,希望觉得我这篇文章写的好的鱼油可以支持一下我,数额最低不限,最大不要超过300谢谢大家的支持。
|