以一个棋牌类app大神.apk为例,,首先我们需要获取apk里面的脚本资源,可以直接用360好压解压缩apk安装包,会得到如下目录:
其中,lib目录含有我们需要调试的so库文件,文件名一般是libcocos2dlua.so或带有cocos字样,当然也有例外,我们需要破解的这个app就有些不一样,名字为libgame.so,不论名字如何变化,拖到idaPro中便知是否用的cocos2dlua框架了。assets目录中含有lua加密脚本及资源。
动态调试app,需要准备app运行环境,真机或模拟器,不建议用模拟器,坑太多,我试用过几个模拟器(雷电、天天、mumu)进行调试环境的搭建几乎都是失败的,但是安卓官方模拟器是可以的(有几次是成功的,也有失败的),需要安装Android-sdk、Android-ndk,但是速度非常慢,所以建议直接上真机,真机需要root权限。
接下来,需要下载adb Android调试工具 并将其加入path变量,手机通过usb连接后,可通过adb命令操作手机,打开cmd,输入adb即可看到帮助命令:
找到电脑idaPro的安装路径中android_server文件,用adb将其拷贝至手机并赋权:
如果程序运行后附加进程调式,需要手机端运行idaPro的 android_server,并 用adb将端口映射至电脑,如果电脑与手机在同一局域网内,则可不用映射。如下图:
手机端运行大神app :
idaPro远程调试附加进程:
如果是局域网内调试,没有用到adb forward映射,则将ip地址换成你手机ip地址:



此时,程序停在程序入口,之后用idapro附加调试,然后用jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700通知程序继续运行,idapro这边就可以继续调试了。
这里提供另一种方法,将Android 根目录下的default.prop的ro.debuggable设置为1(getprop、setprop),强制所有app都可以进行调试,这样就不用修改app并重新打包了。这里要说明一点,jdbconnect失败时,如图所示:



idaPro调试就说到这里,接下来我们利用idaPro破解大神app,大神app是基于cocos2dlua,cocos2dlua用的xxtea加密,我们可以下载源码,用vs打开:




接下来,我们来看大神apk,解压大神apk,将lib目录下的libgame.so拖拽至idaPro打开:

继续,刚才我们看cocos2d源码了解到破解大神app的突破口函数xxtea_decrypt及直接相关的luaLoadBuffer、luaLoadChunksFromZIP,我们在idaPro中查看函数导出表,确认函数名是否与源码中一致。导出表如下:







依照前面所讲,用idaPro对大神app进程(com.qipai.n1)附加调试,并在modules窗口搜索libgame模块:

分别点进去下断,并设置内存窗口与程序窗口同步:



来源:freebuf.com 2018-05-29 00:14:28 by: zzwlpx











