# jadx 使用
直接用 jadx 打开 apk。
# 静态分析
# 1. 代码搜索
activity 里面包含主要代码。其中在 main 之前的为主界面代码,这里只有 mainActivity.
onCreate、onClick 为事件。
# Frida
# 启动:
连接到手机后,进入安装 frida-serve 的位置
adb shell | |
su | |
cd /data/local/tmp/ |
ps -A | grep com
com 指代的是过滤条件,该指令可以展示当前进程名,也对应下图 xml 中的 package 名。
import frida | |
import sys | |
#模板 | |
def on_message(message, data): | |
if message['type'] == 'send': | |
print("[*] {0}".format(message['payload'])) | |
else: | |
print(message) | |
#这里写要 hook 代码 | |
test_t=''' | |
Java.perform( | |
function(){ | |
var MainActivity = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity') | |
MainActivity.onClick.implementation = function(val){ | |
console.log('mmmm:'+this.m.value); | |
console.log(this.n.value); | |
this.onClick(val); | |
}; | |
#下面是匿名类的hook方法,这里要把他自带的.改为$ | |
var test = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity$1') | |
test.run.implementation = function(){ | |
console.log('this is test'); | |
this.run(); | |
} | |
} | |
) | |
''' | |
#模板 | |
#启动方式 1 attachH 后跟进程名 | |
process = frida.get_usb_device(-1).attach('com.example.seccon2015.rock_paper_scissors') | |
script = process.create_script(test_t) | |
script.on('message', on_message) | |
script.load() | |
sys.stdin.read() |
匿名类可以通过 smali 代码判断。
在匿名函数访问外部类:
this.this$0.value.xxx.value
#打印调用堆栈
function printstack(){
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
}