初试so文件解密
2020-07-08 10:56:09 Author: bbs.pediy.com(查看原文) 阅读量:621 收藏

活跃值: 活跃值 (225)

能力值:

( LV3,RANK:20 )

在线值:

[原创]初试so文件解密

19小时前 420

    这里是2W班5月的习题。题目中对一个native函数进行了加密,导致IDA无法看到运行时的代码。加密方式来自于论坛比较久的帖子ThomasKing大佬的简单粗暴的so加解密实现 。照搬了大佬的代码,然后修改了一下加密方式即可完成解密。

    通过本题学习到了so文件的格式解析,基础的加解密思路。

步骤1:尝试用Fart脱壳

顺利完成,查找相关dex

sailfish:/data/data/com.kanxue.test # grep -ril "MainActivity" ./*.txt

./2203744_classlist.txt

./2203744_classlist_execute.txt

拷贝出2203744大小的dex

步骤2:查看Java层代码

OnCreate去绑定事件,test函数进行的字符串比较

步骤3:查看so文件中test的代码

addr_RegisterNatives: test

addr_RegisterNatives: (Ljava/lang/Object;)Z

addr_RegisterNatives func: 0x8dc5

test是动态注册的,注册地址是0x8dc5

反汇编代码比较奇怪

查看下sub_8930

这里获取so地址,然后查找ooxx函数的偏移

查找libnative-lib.so 内存中地址

看这段代码和so文件加密帖子(https://bbs.pediy.com/thread-191649.htm)给出的demo非常像,只是函数加密的方式不一样,具体思路可以直接去查看原帖。

步骤4:解密so文件

加密是找到函数偏移和长度,进行位运算,所以解密也就按照一样的方式还原即可。

下图是运行效果

解密后再次反编译,解密方法参考帖子给出的代码,代码在windows下读取so文件会出现读取不准确,不知道为什么。最终在ubuntu下运行正常。

直接比对的,没加密。使用frida查看1C04C就是kanxuetest。

输入效验正确。

[招聘]上海招聘移动逆向工程师及游戏反外挂工程师!


文章来源: https://bbs.pediy.com/thread-260537.htm
如有侵权请联系:admin#unsafe.sh