一、实验策划 1. 学习和协调adb调试器用的基本使用轨范,大约熟练使用adb器用的常用敕令; 2. 闇练Frida动态插桩器用的基本使用轨范,大约字据需求使用Frida对Java层代码进行径态插桩。 二、前置准备1. 常识学习 进行本实验前请先完成课本第2章、第5章和第6章的学习,主要包括2.2.2节安卓欺诈调试环境搭建,5.1.1节逆向器用Jadx的使用。 2. web劳动搭建 从安卓官方装配adb器用,并将其添加到环境变量。 常用敕令如下: ADB敕令刻画adb devices稽查手机建筑adb install package装配欺诈adb shell畅达结尾的shelladb shell pm list packages -3稽查手机里悉数的第三方包名,要是依然在shell,则不需要加adb shelladb push D:/xx.text /sdcard/xx.text将主机上的文献发送笔直机adb pull /sdcard/xx.text D:/xx.text将手机上的文献下载到主机adb shell am start -n包名/类的全名 启动导出的行径adb logcat稽查log日记adb shell dumpsys activity top | grep ACTIVITY稽查现时运转的Activityadb shell getprop ro.product.cpu.abi稽查手机的abi3. Frida环境树立 最初需要树立python3环境,之后使用pip/pip3下载Frida联系的包 pip3 install frida pip3 install frida-tools pip3 show frida 稽查frida的版块,默许装配最新的16.2.1 下载与frida版块一致的frida server,举例arm64的建筑下载frida-server-16.2.1-android-arm64。将server通过adb器用传输笔直机,赋予可奉行权限并启动。 以frida-server-16.2.1-android-arm64为例: adb shell su cd /data/local/tmp chmod 777 frida-server-16.2.1-android-arm64 ./frida-server-16.2.1-android-arm64 4. Frida剧本自动补全 欧美日韩av无码在线1. 从NodeJs官网装配Node.js 2. 编写JS剧本可参考Frida官网的JS API,为了便捷编写,可荟萃VS Code树立剧本自动补全功能。使用cnpm/npm i @types/frida-gum将模块装配到现时目次。 3. 使用VS Code掀开该目次,创建test.js之后即可使用Frida代码补全功能。 5. Frida基本使用格林童话 使用经由:编写注入剧本,注入指定程度 - frida -U XXX -l frida_1.js XXX是包名、程度名 -l 后跟注入的剧本 - frida -U -p[pid] -l frida_1.js 指定程度id注入,可字据frida-ps -U | grep “xxx” 寻找程度id - frida -U --no-pause -f XXX -l frida_1.js 使用spwan方法启动,注入时机较早 编程语法:注入java层的代码在Java.perform下编写,具身体式如下: function hook_java() { Java.perform(function () { ... }); } 其他使用轨范可参考官网API,或网上的学习府上。保举阅读 三、任务刻画本实验的任务需要使用Frida器用对Java层进行Hook,完成以下四个任务,最终获取Flag。 任务1 修改复返值启动欺诈是一个登录页面,需要输入用户名和密码。使用Frida Hook联系函数,兑现轻易用户名密码登录。 任务2 修改换量的值登录后参加第二关,需要修改换量让我方成为VIP,何况缔造cnt的值大于100。 任务3 主动调用函数字据页面指示,使用Frida主动调用联系函数,缔造文本浮现框的值为Secret的值。 任务4 动态加载dex的Hook通过考证,获取Flag值。 四、成果提交形势1. lab4_code.zip:本次实验中的实验代码,每个任务编写一个Frida函数,并将通过该任务的Frida代码写在该函数内,第一个任务对应函数名为hookLogin、第二个为hookChall1、第三个为hookChall2,第四个为hookChall3 2. lab4.docx:本次实验的实验评释,包括实验环境树立、实验设施、实验成果和实验心得等施行 五、评分标准1. 完成任务1(10%):通过注入兑现轻易用户名和密码登录 2. 完成任务2(20%):收效修改换量值 3. 完成任务3(20%):收效调用函数修改文本 4. 完成任务4(20%):收效获取正确的Flag值 5. 实验评释(30%): - 施行圆善性和原创性(20%) - 评释包含实验意见、详备设施、成果、讲究想考等重要部分 - 代码瞎想谨守代码范例,有必要的解说证据 - 评释撰写和抒发(10%) - 评释形势范例,说话抒发了了 - 大约合适使用图表等扶植证据评释施行 六、附件施行证据1. FridaLab.apk:本实验的分析策划 七、参考谜底任务一:在考证用户名和密码时,调用了里面类中的check进行判断,修改该函数的复返值为true即可兑现轻易用户密码登录 function hookLogin(){ Java.perform(function(){ var checkLogin=Java.use("com.lab.fridalab.MainActivity$checkLogin"); checkLogin.check.overload("java.lang.String","java.lang.String").implementation=function(usr,pwd){ console.log("checkLogin.check: "+usr+' '+pwd); return true; } }); } 任务二:需要修改isVIP和cnt变量,isVIP是静态变量可径直修改值,cnt是实例变量需要寻找现时Activity的对象,并修改该对象中cnt的值 function hookChall1(){ Java.perform(function(){ var ChallActivity1=Java.use("com.lab.fridalab.ChallActivity1"); ChallActivity1.isVIP.value=true; Java.choose("com.lab.fridalab.ChallActivity1",{ onMatch: function(instance){ console.log("=== find ChallActivity1 instance ==="); instance.cnt.value=1000; }, onComplete: function(){} }) }); } 任务三:通过调用静态轨范getSecret获取Secret的值,之后调用实例轨范mySetText来修改文本框的值 function hookChall2(){ Java.perform(function(){ var ChallActivity2=Java.use(com.lab.fridalab.ChallActivity2); ChallActivity2.isVIP.value=true; Java.choose(com.lab.fridalab.ChallActivity2,{ onMatch: function(instance){ console.log(=== find ChallActivity2 instance ===); instance.mySetText(txt); }, onComplete: function(){} }) });} 任务四:先点击按钮让欺诈加载外部的dex,摆列类加载器找到加载外部dex的类加载器,缔造Java.classFactory.loader为该类加载器,之后便可使用Java.use获取到外部dex中的类并对函数进行hook,修改复返值为ture即可getflag function hookChall2(){ Java.perform(function(){ var ChallActivity2=Java.use("com.lab.fridalab.ChallActivity2"); var txt=ChallActivity2.getSecret(); Java.choose("com.lab.fridalab.ChallActivity2",{ onMatch: function(instance){ console.log("=== find ChallActivity2 instance ==="); instance.mySetText(txt); }, onComplete: function(){} }) });}
|