背景
手生很久,纯粹为了练习,脱一下so而已
另外:顺便看看上海的工作机会,有老板认为合适的,可以私我
1
2
3
4
5
6
7
8
9
10
|
1040882146
@qq.com
语言: java
/
c
7
年framework经验: 不管任何项目,都是直接或者间接要对framework层进行调试,源码阅读分析
1.
擅长android系统framework以及三方app等兼容性问题的分析
2.
擅长安卓虚拟化技术,比如双开工具,有VMOS虚拟机的研发经验
3.
熟悉AMS,
Input
模块
4.
擅长hook点分析,解决业务痛点
5.
移植linker实现GOT表hook(私人仓库)
6.
有逆向
/
调试经验, 会用jeb
/
IDA工具
7.
做过几款游戏的安全分析
|
下图是IDA打开的情况,可以看到JNI_OnLoad被加密了
还有其他的函数,基本都是加密的状态
整个segment给加密了,解密的地方肯定是init_array中的某个地方解密的,简单起见,这里不跟踪解密的流程了。
经验上对getPackageInfo下断点
不用怀疑getPackageInfo这个点,也不要去想我为啥在这里下断点,也可能是经验之谈吧
1
2
3
4
|
if
(TextUtils.equals(calledMethod.getName(),
"getPackageInfo"
)) {
Debug.waitForDebugger();
Log.d(
"whulzz"
,
"getPackageInfo called"
);
}
|
下断点后的调用栈是这样的
这个调用栈很明显,getPackageInfo是被nativeLoad函数调过来的,也就是libDexHelper.so通过jni调用的
断点断下来,然后用IDA挂住进程,开始把so从内存dump出来
内存大小 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函数解密后
更多【某当网apk加固脱个so】相关视频教程:www.yxfzedu.com