roger 发表于 2020-7-29 22:46:49

初试so文件解密


本文为看雪安卓高研2w班(5月班)优秀学员作品。下面先让我们来看看讲师对学员学习成果的点评,以及学员的学习心得吧!
  讲师点评
对于APK的逆向来说,第一步往往就是先完成对App中java代码的脱壳;接下来要做的就是静态的逆向分析或者是结合动态的hook等对运行逻辑进行分析;最后,难度大一些的App往往就会进入到so中的函数当中,安全强度大的App甚至是会再次对so进行加壳。但不论是dex的脱壳,还是so的脱壳,时机都是非常关键的。时机不对,即使是正确的内存地址偏移,dump得到的smali指令流以及汇编代码都可能是不对的,依然是未解密的字节流。这道题考察的是对elf文件的结构知识的掌握。这个App对so中函数进行了保护,在被保护的函数的关键逻辑执行前进行解密,执行结束后会再次对关键逻辑进行加密。这位学员有着扎实的基本功,才能够快速抓住重点,成功拿下flag。  学员感想
  这里是2W班5月的习题。题目中对一个native函数进行了加密,导致IDA无法看到运行时的代码。
  
  加密方式来自于论坛比较久的帖子ThomasKing大佬的简单粗暴的so加解密实现 。照搬了大佬的代码,然后修改了一下加密方式即可完成解密。
  
  通过本题学习到了so文件的格式解析,基础的加解密思路。
ps. 题目附件请点击“阅读原文”下载。现在,看雪《安卓高级研修班(网课)》9月班开始招生啦!点击查看详情报名吧~  
  解题过程
  步骤1:尝试用Fart脱壳
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwSNjSu4wucOjHb58LFo3SqnctehnbxMhpcic8OogFm20oOg7DR4hu8kQ/640?/0.png  顺利完成,查找相关dex:
  
  sailfish:/data/data/com.kanxue.test # grep -ril "MainActivity" ./*.txt
  ./2203744_classlist.txt
  ./2203744_classlist_execute.txt
  
  拷贝出2203744大小的dex。
  步骤2:查看Java层代码
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwMtruYpw4ItUp025ehCnnQNawQQicibibxA2DxibxAsRK4cib4Syfpl3uP5g/640?/0.png  OnCreate去绑定事件,test函数进行的字符串比较。
  步骤3:查看so文件中test的代码
  addr_RegisterNatives: test
  addr_RegisterNatives: (Ljava/lang/Object;)Z
  addr_RegisterNatives func: 0x8dc5
  test是动态注册的,注册地址是0x8dc5
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQw7vyrhajoxUkibuLx2kxFWNiblicf62gbCZdViaO365Hw5afDtXkUa9AJ4Q/640?/0.png  
  反汇编代码比较奇怪。
  查看下sub_8930:
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwfAFld1sASXav1D37BeWZoV8VjQBKsokbIWVdTctgZJpMPYAyF6JD5g/640?/0.png  这里获取so地址,然后查找ooxx函数的偏移:
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwIeQpUL4kA6NsPMLE8oiabwicb5ne9b4IBkzWjDpkI24f3hLOXjRtrkwQ/640?/0.png  
  查找libnative-lib.so 内存中地址:
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQweGUyD2ZsicrBTQsWYrxEH0uiaib7w3XO6pibOewXniboiayib7CBT8W3hPZ0Q/640?/0.png  看这段代码和so文件加密帖子(https://bbs.pediy.com/thread-191649.htm)给出的demo非常像,只是函数加密的方式不一样,具体思路可以直接去查看原帖。
  步骤4:解密so文件
  加密是找到函数偏移和长度,进行位运算,所以解密也就按照一样的方式还原即可。
  
  下图是运行效果:
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwmHrFlpdQA3IJicKc7ajY3yUTnVOljyfuBRqPIeo0rd5HUAlvSjnicpicw/640?/0.png  解密后再次反编译,解密方法参考帖子给出的代码,代码在Windows下读取so文件会出现读取不准确,不知道为什么。最终在ubuntu下运行正常。
http://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwELxSRJnCmg7WYshywIia5LaLLmlfVYtJmDwia6GbCn3Z681MhKYVp5XA/640?/0.png  直接比对的,没加密。使用frida查看1C04C就是kanxuetest。
  输入效验正确。
http://mmbiz.qpic.cn/mmbiz_gif/b96CibCt70iaa8r7PJoyAtlfHAKe8RosE3wYVKBac55p1HPBJHZS42ywnG4yYtD3jo9A9e5kawBZs4IE6R1C4wibw/640?/0.gif  - End -
http://mmbiz.qpic.cn/sz_mmbiz_jpg/1UG7KPNHN8FVpRxDib5UfQUkecT1jOvQwLHswhQFZmch2ON2n9ChLKJSBf2IDeibsZBIjFhhU2L7EO898015H98w/640?/0.jpg  看雪ID:无造
https://bbs.pediy.com/user-571058.htm*本文由看雪论坛 无造 原创,转载请注明来自看雪社区。**** Hidden Message *****

sumo 发表于 2020-10-5 19:43:55

感谢分享
页: [1]
查看完整版本: 初试so文件解密