一个android crackme的逆向
crackme难度不高,主要是为了熟悉逆向分析apk的步骤。
脱壳#
反编译apk发现加了360的壳,主Activity为com.kanxue.test.MainActivity
frida-dexdump一把梭,dump的dex需要修复checksum
和signature
。修复完成后jadx反编译dex,程序会调用native函数test检测flag是否正确。
去字符串加密#
ida打开so文件先看一下init/init_array
,发现了标准的ollvm字符串加密函数。
利用unicorn
模拟执行加密函数datadiv_decode4192348989750430380
并将加密的字符串修复。
函数解密#
so导出函数中先搜索test
并未找到说明是动态注册,查看Jni_OnLoad
发现其被动态注册为ooxx
。
查看ooxx
发现函数部分代码被加密无法反编译,其首先调用的应该是解密函数。
sub_8930
函数通过找到ooxx函数的起始地址后将其加密部分代码进行解密,解密完成后调用cacheflush
刷新。
通过frida来hookcacheflush
将解密后的函数打印出来.
function main(){
var module_base = Module.findBaseAddress("libnative-lib.so");
var mprotect_add = Module.findExportByName("libc.so", "cacheflush");
Interceptor.attach(mprotect_add,{
onEnter: function(args){
if(args[0] > module_base && args[0] < module_base.add(0x100000)){
console.log("\nargs :", args[0], args[1], args[2]);
console.log(args[0].sub(1).readByteArray(args[1] - args[0]));
console.log("called cacheflush");
}
},
onLeave: function(){}
})
}
setImmediate(main)
hook 发现其会调用两次cacheflush,也就是先解密函数并刷新,执行完之后再次加密函数并刷新。
用打印的数据修复so文件中被加密的函数,得到flag就是kanxuetest
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】