刚刚开始看APP的一些抓包和请求,就遇到很多问题,现在想把一些自己遇到的坑记录下来
下面所有的练习题都是猿人学APP。
第五题 新年彩蛋的题
public /* synthetic */ void lambda$initListeners$1(o00O000 o00o0002) {
this.f7781OooO0o0++;
String str = this.f7781OooO0o0 + o0O000.OooO00o.OooO00o(482154048497611455L) + System.currentTimeMillis();
String OooO0O02 = DexUtils.OooO00o().OooO0O0(getContext(), this, str);
OooO0OO oooO0OO = this.f7780OooO0o;
oooO0OO.OooOO0o(((oo000o) oooO0OO.OooOOOO(oo000o.class)).OooOoO0(str, OooO0O02), new OooO0O0(o00o0002));
}
在jadx中看到的反编译 是上面这样的,我当时想着是hook OooO0O0 中的第二个参数this, 因为刚开始看frida,所有很多的API都在慢慢琢磨。
let DexUtils = Java.use("xxxx.DexUtils");
DexUtils["OooO0O0"].overload('android.content.Context', 'java.lang.Object', 'java.lang.String').implementation = function (a, b, c) {
let ret = this.OooO0O0(a, b, c);
return ret;
}
我在开始打印b的时候,发现是这样的
ChallengeFiveFragment{b59b5fd} (24411447-fbca-4fb2-809e-aa3fa48e14c6 id=0x7f0a0179 tag=题目五:2022新年快乐)
我当时想打印 this.f7781OooO0o0 也就是页数的值
DexUtils["OooO0O0"].overload('android.content.Context', 'java.lang.Object', 'java.lang.String').implementation = function (a, b, c) {
console.log(b.OooO0o0)
let ret = this.OooO0O0(a, b, c);
return ret;
};
发现打印出来的是一个undefined
历经千辛万苦才在谷歌找见正确的打印方式
let ChallengeFiveFragment = Java.use("com.yuanrenxue.challenge.fragment.challenge.ChallengeFiveFragment");
// 这里应该是先hook这个类
let bbb = Java.cast(b, ChallengeFiveFragment)
// 然后通过Java.cast 去来强转类型 把b转换成ChallengeFiveFragment类型
console.log("bbb-->", bbb.OooO0o0.value)
// bbb--> 2
这样就可以愉快的打印这个变量了。同时修改变量和以前一样 利用等号的方式直接修改 比如
bbb.OooO0o0.value = 10
虽然但是 , 我还是想到一个问题 在这个题目中 this的变量只有一个页数,如果后续遇到别的APP, this的变量数不清呢 ,也需要这么一个一个去hook去传参吗, 应该有更简便的办法吧 但是我没有找到。。。
第九题 双向证书
这道题用了r0ysue的r0capture, 直接获取到了证书和密码,尝试了requests和requests_pkcs12 请求,都是请求成功的状态,
但是遇到一个问题,因为没有抓到包 而r0capture 抓到的直接是一个IP+端口的地址
所以并不确定这道题的请求地址是否有域名。
反正我尝试了前面几道题的域名是失败的!!
等有时间学习一下双向验证怎么用抓包软件抓包
刚开始学习APP抓包才知道坑有多少,,虽然大部分都有大佬帮忙解决掉了。
这边文章仅仅记录路上遇到的坑,同时也希望正在学习APP逆向的小白道友避免这些坑。。