先执行IDA动态调试步骤
在JNI_ONLOAD下断点,越往后越好,按ctrl+s查看节点信息,后面的R表示读,W表示写,X表示执行
我们需要的so变成了三个部分,第一个RX表示里面是代码区,对我们没用,最主要的是找到原so文件中被混淆的数据区,其实只需要 RW
复制上图中的start和end的值到文件中,后面用,执行脚本把so dump出来,如下图,start和end替换成上图中的值,然后点击run即可dump出来,代码如下
static main(void)
{
auto fp, start, end, size;
start = 0x792F1000;
end = 0x79302000;
fp = fopen("D:\\r.so", "wb");
for ( ; start < end; start++ )
fputc(Byte(start), fp);
}
# dex的dump如下,本质相同
static main(void)
{
auto fp, dexAddress, end, size;
dexAddress = 0xA7019000;
size = 0xA701B000;
end = dexAddress + size;
fp = fopen("D:\\classes.dex", "wb");
for ( ; dexAddress < end; dexAddress++ )
fputc(Byte(dexAddress), fp);
}
需要一个bt脚本,ELFTemplate.bt,把下图中2个文件全放进010 Editor 软件中,然后拖入ELFTemplate.bt,在原始so文件中(libnet_crypto.so)中按F5进行解析,接下来目标是把已经解密后的rw.so中的解密部分复制到原始的so文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c3tSxZpA-1591440543459)(C:%5CUsers%5Calan%5CDesktop%5Cupload%5Cimage-20200606165751543.png)]