[原创]某当网apk加固脱个so
2022-10-26 10:59:32 Author: bbs.pediy.com(查看原文) 阅读量:32 收藏

[原创]某当网apk加固脱个so

3天前 1923

手生很久,纯粹为了练习,脱一下so而已
另外:顺便看看上海的工作机会,有老板认为合适的,可以私我

1

2

3

4

5

6

7

8

9

10

11

1040882146@qq.com

语言: java/c

7年framework经验: 不管任何项目,都是直接或者间接要对framework层进行调试,源码阅读分析

1.擅长android系统framework以及三方app等兼容性问题的分析

2.擅长安卓虚拟化技术,比如双开工具,有VMOS虚拟机的研发经验

3.熟悉AMS, Input模块

4.擅长hook点分析,解决业务痛点

5.移植linker实现GOT表hook(私人仓库)

6.拥有SVC hook的经验,包括BPF的实现方案

7.有逆向/调试经验, 会用jeb/IDA工具

8.做过几款游戏的安全分析

下图是IDA打开的情况,可以看到JNI_OnLoad被加密了

还有其他的函数,基本都是加密的状态

整个segment给加密了,解密的地方肯定是init_array中的某个地方解密的,简单起见,这里不跟踪解密的流程了。

不用怀疑getPackageInfo这个点,也不要去想我为啥在这里下断点,也可能是经验之谈吧

1

2

3

4

if (TextUtils.equals(calledMethod.getName(),"getPackageInfo")) {

    Debug.waitForDebugger();

    Log.d("whulzz", "getPackageInfo called");

}

下断点后的调用栈是这样的

这个调用栈很明显,getPackageInfo是被nativeLoad函数调过来的,也就是libDexHelper.so通过jni调用的

内存大小 74d1220000 - 74d10cf000 = 0x151000

执行脚本,就可以脱出来解密的内存了

用IDA打开,发现有点问题

Elf Header以及program header是正常的

dynamic节区不正常

dynamic节肯定是在so被Load完成后,被梆梆置为0了,memset(dynamic, 0, size)

因为静态so库的节肯定是正常的,不正常就无法加载so了,所以我手动将apk中的so库打开,将其dynamic节的数据拷贝了过去

这个是apk中so的dynamic节

拷贝到dump.so后,dump.so重新加载到IDA中,JNI_OnLoad等均已解密

JNI_OnLoad解密后

fileExists函数解密后

[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

最后于 3天前 被whulzz编辑 ,原因:


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