t1ger 发表于 2020-1-4 13:49

某盾 so 壳分析

本帖最后由 t1ger 于 2020-1-4 14:07 编辑

最近分析某盾的so壳,有点意思。全程字符加密,没有任何可用字符串可以参考。重要函数,加密。
运行时解密,运行完毕,重新加密回去。
样本libnetsecsdk-4.0.7.so,armv7a,
https://jcenter.bintray.com/com/netease/mobsecurity/mobsecLib/4.0.7/可下载1.节数目IDA打开出错。节数目由 0xff 修改为0x18,可IDA分析




2.字符串表字符串表加密:文件偏移file:///C:/Users/storm/AppData/Local/Temp/enhtmlclip/Image(1).png




XOR 第二字节,可解密

3.运行中加密的函数

解密操作在init_array中。包括计算真实的jni_onload解密->运行(f_Decrypted() )->还原






3.5个加密函数
文件视图

反编译视图:

函数地址加密XOR0x00000073后;可完全解密后:

0x5591为真实的JNI_ONLOAD地址,当然,函数是被加过密的。XOR0x58。


4.校验CRC
1.CheckLowByte():0x21+0xb1+0xcc+0x41=0x1df

2.CRC数据校验

0x6c3c平分4块计算CRC
会计算CRC,需要过掉CRC检测,后面才能继续。




5.一些数据解密
有TEA解密,解密的数据何用,未分析出来。高手请指教



6.进入真实的Jni_onload
加载so后,就进入真实的jni_onload

sobase + 0x5591
操作:
1.解压数据
2.解密字符串,所有字符串,还是加密的
3.注册native





7.解压
init_array 。
从load + 0xD36C + 0x10

A1666000(基址) + 0xC36C + 0X1000 = A167 236C‬


A1666000 + 0xE000 = A167 4000‬ -> 目的地址


8.注册native

基址:A1CB2000
解压后数据:
A1D47014 "w410e0e9eb51cc6b0"
A1D47018"(Ljava/lang/Object;II)Ljava/lang/String"
A1D4701C DCD loc_A1CCC830+1

A1D47020 "w6e685a9adf5af10b"
A1D47024 "(Ljava/lang/Object;DDLjava/lang/String;"...
A1D47028 sub_A1CCC20C+1

A1D4702C "wd92f591f6307ab76"
A1D47030 "(Ljava/lang/Object;[Ljava/lang/String;L"...
A1D47034 sub_A1CCCF10+1

A1D47038 "w1228bcedf6204eeb"
A1D4703C "(Ljava/lang/Object;Ljava/lang/String;)L"...
A1D47040 sub_A1CCBBB4+1

A1D47044 "w3270a03dafee4a0a"
A1D47048 "(Ljava/lang/Object;Ljava/lang/String;)L"...
A1D4704C sub_A1CCBB04+1

A1D47050 "w238jfd9349jdj394"
A1D47054 "(Ljava/lang/Object;[Ljava/lang/String;)"...
A1D47058 sub_A1CCBC64+1

A1D4705C "w101e1ab92f282335"
A1D47060 "(Ljava/lang/Object;Ljava/lang/String;[B"...
A1D47064 sub_A1CCB95C+1

A1D47068 "w230921e1b36f7799"
A1D4706C "(Ljava/lang/Object;[Ljava/lang/String;)"...
A1D47070 sub_A1CCBF38+1

A1D47074 "w5dbd0f6bd72afff7"
A1D47078 "(Ljava/lang/Object;Ljava/lang/String;)["...
A1D4707C sub_A1CCB9D8+1

A1D47080 "w97c82a1471981172"
A1D47084 "(Ljava/lang/Object;Ljava/lang/String;)I"
A1D47088 sub_A1CCBA50+1

A1D4708C "w7aa090cda25562b5"
A1D47090 "(Ljava/lang/Object;)Ljava/lang/String;"
A1D47094 sub_A1CCC510+1


至此,分析完毕。
这个壳,确实很优秀,字符串加密,代码动态加密,运行后解密。
压缩重要代码。静态分析基本没用。

2Burhero 发表于 2020-1-13 11:36

感谢分享

一曲苍凉、 发表于 2020-1-31 12:22

楼主,我有个elf头的二进制文件可以帮我看一下嘛,最好教我一下怎么解?如果可以一定好好感谢!
页: [1]
查看完整版本: 某盾 so 壳分析