对于 Android 逆向,首先需要熟悉对于 adb 基本命令使用
1.C:\Users\sun>adb shell
ASUS_I003DD:/ # getprop ro.product.cpu.abi
x86_64
查看架构
exit 退出
2. adb push "E:\reverse\ida\IDA_Pro_7.7\IDA_Pro_7.7\IDA_Pro_7.7\dbgsrv\android_x86_server" /data/local/tmp/
将文件 push 进模拟器
3.
赋予文件权限
先 jeb 启动调试
在 manifest 看是否有调试权限
4. adb shell am start -D -n com.example.ndktest2/.MainActivity
启动调试,要先在模拟器打开应用
这时我们就可用 JEB 启动 app 调试了,在 debugger 窗口点击开始
双击进程,就行了。
5. adb forward tcp:23946 tcp:23946
再重新打开另一个 cmd,将模拟器的端口转发到电脑,若不执行此步骤,可能会导致使用 IDA 调试时无法连接到模拟器:
这也是用 ida 调试安卓软件,en 这个是 x86 架构的32位调试服务,所以 so文件也要是32位
设置 process options 后,记得attach 进程去调试
断点位置要下好,so文件大多一些地方都不能 F5 反汇编,不太好看
6. conda create -n python37 python=3.7
安装python3.7环境项目
7. conda activate python37
切换环境
【SWPU2019】easyapp
base64加密,拼接字符串,提交不对
在函数开头下断点看看什么情况
大佬说结果还没到断点处就登陆失败了
但确实不怎么会 Android 调试,直接到这
调了几次就这样了
NewStringUTF
是一个 JNI 函数
用于将本地的 C 或 C++ 字符串转换为 Java 的 UTF-8 字符串,这个函数在真正的加密函数之中肯定也会被用到的,而假的加密函数 Encrypt 中也调用了这个函数,所以我们去这个函数下断点
又不一样,烦死了
断点下在:A53C9093,因为 push ebp;mov ebp, esp;要保存栈帧
跑一下发现跑起来了,这说明并没有反调试,而是加密函数被混淆了或者被 hook 了,我们可以通过函数调用栈找到真正的加密函数
我的还是停在刚刚那处
所谓函数调用栈就是当我们每一个函数被调用时,都会在出栈入栈时留下自己的足迹,在寄存器 ebp 中。于是我们就可以通过函数调用栈找到哪一个函数偷偷调用了这个字符串处理函数
前几天也看了一下函数栈帧
【详解】函数栈帧——多图(c语言)_指针与函数值传递-CSDN博客
最终找到真正的加密函数是 test
查看JNI_Onload??
第十届SWPUCTFwriteup-安全客 - 安全资讯平台
JNI 学习笔记——通过RegisterNatives注册原生方法 - 简书
最后一点学了,再来写记录吧,今主要是把环境配了,结果简直了唉。