-
-
[原创]一个section加密的apk的分析
-
发表于:
2018-5-31 17:15
8805
-
这个apk是去年参加某个CTF比赛时候的一道题,当时没做出来,这几天整理文件翻出来了,决定再做一做,写点笔记。
这一点文章中没提,如果程序的debuggable选项未开启就直接jdb去attach的话是调试不了的,会出现下面这样的错误。
可以修改AndroidManifest.xml中的debuggable="true"然后签名重打包;或者修改系统属性将defalut.prop中ro.debuggable设置为1。这两种方法操作起来其实都很麻烦而且容易遇到各种各样的问题,所以我一般用的方法一个是riusksk的BDopener,一个是netsniffer优化的mprop。这两个工具更方便。如果还是报错的话可以打开DDMS,点一下你要调试的进程,点了之后会出现8700的端口和红色的虫子。这个时候再attach应该就没问题了,成功attach上去虫子会变成绿色。
题目描述:某企业反馈其员工专用手机上,被安装了一个间谍软件,该软件会不定期自动连接一个疑似黑客控制的服务器,服务器的连接密码内嵌在该软件中。逆向分析此间谍软件,获取其服务器的连接密码。
首先安装运行一下。
拖到jadx里面,可以看到java层并没有什么核心功能,关键是导入了一个net库,用了里面的upload函数。
解压apk之后得到libnet.so,拖到IDA里面提示First Section must be SHT_NULL,很有可能section被加密了。
在IDA里面看到有个.init_proc和JNI_OnLoad,JNI_OnLoad的代码应该是被加密过的。
那么这个时候我们就只能动态调试了,动态调试的步骤网上一搜一大堆就不再详细写了,这里在linker下的断点,
BLX R4之后就进入了.init_proc。
直到执行完sub_2C5A之后发现libnet.so已经消失了,取而代之的是debug077,同时JNI_OnLoad也被解密了出来。
这里需要导入JNI,在IDA7.0以下的版本中通常是通过
这篇文章中的方法导入JNI的。在IDA7.0及以上的版本中有一种更简单的方法。View->Open subviews->Type Libraries,按下Insert,选择android_arm(IDA6.8里面没有这个库所以不能用这个方法)。
打开Structures,按下Insert,选择Add standard structure,选择_JNIEnv和JNINativeMethod。
把变量的类型改成JNIEnv*,Force call type,现在看起来舒服多了。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-6-1 13:55
被houjingyi编辑
,原因: