解决ollvm字符串混淆的几种方法

手动还原

还原前
解决ollvm字符串混淆的几种方法_第1张图片
还原后
解决ollvm字符串混淆的几种方法_第2张图片

手动加稍微自动

将整个so文件导出为C文件

data中的数据,和解密的代码如下
解决ollvm字符串混淆的几种方法_第3张图片
解决ollvm字符串混淆的几种方法_第4张图片
稍微修改修改,可以当做C程序跑,解密字符串

确认加密字符串运行中已解密,用frida打印

function print_string(addr) {
    var so_base_addr = Module.findBaseAddress("libshowme.so");
    var addr_str = so_base_addr.add(addr);
    console.log("addr:", addr, " ", ptr(addr_str).readCString());
}

应用运行,dump so

unicron 执行

frida在执行时打印字符串的首地址

uEmu

1、使用的是ida7.0可安装版本,自动安装了python2.7
2、pip install unicorn
3、下载脚本 https://github.com/alexhude/uEmu
4、在windows上使用的

import sys
sys.path.append('D:\\Soft\\IDA Pro 7.x\\python\\3\\PyQt5')

5、修改脚本,打开更多的功能

6、导入uEmu.py
7、指定运行的范围:可以通过下断
解决ollvm字符串混淆的几种方法_第5张图片
解决ollvm字符串混淆的几种方法_第6张图片
8、选中uEmu的start:设置PC ,为第一个下断的位置
9、选中run,开始执行,运行到下一个断点停下
10、通过show memory Range:查看被eEmu修改的内存
修改前
解决ollvm字符串混淆的几种方法_第7张图片
uEmu执行后
解决ollvm字符串混淆的几种方法_第8张图片
11、通过show Mapped Memory可以dump指定的段(被修改后的内容)

你可能感兴趣的:(android安全)