Rumah >Java >javaTutorial >Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java
Dalam artikel yang membawa anda memahami intipati Frida, kami telah mempelajari cara melebihkan Ke proses, mari kita semak kod dahulu:
my_class.fun.overload("int" , "int").implementation = function(x,y){ my_class.fun.overload("java.lang.String").implementation = function(x){
Maksudnya, kita perlu membina tatasusunan terlampau beban dan mencetak setiap lebihan beban. Mari pergi terus ke kod:
//目标类 var hook = Java.use(targetClass); //重载次数 var overloadCount = hook[targetMethod].overloads.length; //打印日志:追踪的方法有多少个重载 console.log("Tracing " + targetClassMethod + " [" + overloadCount + " overload(s)]"); //每个重载都进入一次 for (var i = 0; i <p> Dengan cara ini, kami telah memproses semua lebihan kaedah, dan kemudian menghitung semua kaedah. </p><h4>Semua kaedah kelas 0x02.hook</h4><p> masih dimuat naik terus ke kod: </p><pre class="brush:php;toolbar:false">function traceClass(targetClass) { //Java.use是新建一个对象哈,大家还记得么? var hook = Java.use(targetClass); //利用反射的方式,拿到当前类的所有方法 var methods = hook.class.getDeclaredMethods(); //建完对象之后记得将对象释放掉哈 hook.$dispose; //将方法名保存到数组中 var parsedMethods = []; methods.forEach(function(method) { parsedMethods.push(method.toString().replace(targetClass + ".", "TOKEN").match(/\sTOKEN(.*)\(/)[1]); }); //去掉一些重复的值 var targets = uniqBy(parsedMethods, JSON.stringify); //对数组中所有的方法进行hook,traceMethod也就是第一小节的内容 targets.forEach(function(targetMethod) { traceMethod(targetClass + "." + targetMethod); }); }
ialah masih dimuat naik ke bahagian teras kod:
//枚举所有已经加载的类 Java.enumerateLoadedClasses({ onMatch: function(aClass) { //迭代和判断 if (aClass.match(pattern)) { //做一些更多的判断,适配更多的pattern var className = aClass.match(/[L]?(.*);?/)[1].replace(/\//g, "."); //进入到traceClass里去 traceClass(className); } }, onComplete: function() {} });
// 追踪本地库函数 function traceModule(impl, name) { console.log("Tracing " + name); //frida的Interceptor Interceptor.attach(impl, { onEnter: function(args) { console.warn("\n*** entered " + name); //打印调用栈 console.log("\nBacktrace:\n" + Thread.backtrace(this.context, Backtracer.ACCURATE) .map(DebugSymbol.fromAddress).join("\n")); }, onLeave: function(retval) { //打印返回值 console.log("\nretval: " + retval); console.warn("\n*** exiting " + name); } }); }
Akhirnya tiba masanya untuk pertempuran sebenar Kod di atas disambungkan bersama untuk membentuk skrip Malah, skrip ini juga diperkenalkan dalam awesome-frida, tetapi ia mempunyai pepijat kecil diubah suai oleh Calabash, ia akhirnya boleh digunakan.
Mari cuba beberapa fungsi utamanya yang pertama ialah fungsi eksport perpustakaan tempatan.
setTimeout(function() { Java.perform(function() { trace("exports:*!open*"); //trace("exports:*!write*"); //trace("exports:*!malloc*"); //trace("exports:*!free*"); }); }, 0);
hook
kami ialah fungsi open()
Jalankan dan lihat kesannya:
$ frida -U -f com.whatsapp -l raptor_frida_android_trace_fixed.js --no-pause
Seperti yang ditunjukkan dalam gambar. *!open*
Fungsi yang dieksport seperti openlog
dan open64
dipadankan mengikut peraturan biasa, dan semua fungsi ini disambungkan dan parameter serta nilai pulangannya dicetak.
Bahagian mana yang anda mahu lihat seterusnya, cuma masukkan ke dalam jadx
, "analisis" secara statik, semak imbasnya sendiri atau cari berdasarkan rentetan.
Contohnya, kalau kita nak tengok kandungan pakej com.whatsapp.app.protocol
dalam gambar di atas, kita boleh setkan trace("com.whatsapp.app.protocol")
.
Anda boleh melihat bahawa semua fungsi dan kaedah dalam pakej, termasuk lebihan, parameter dan nilai pulangan dicetak. Inilah daya tarikan frida
skrip.
Sudah tentu, skrip hanyalah alat lagipun Pemahaman anda tentang Java
, Apl Android dan kreativiti anda adalah penting.
Seterusnya, anda boleh menggunakan modul Xposed untuk melihat modul yang dibuat oleh orang lain untuk whatsapp
, fungsi hook
yang manakah, fungsi yang dilaksanakan dan belajar menulisnya sendiri.
Sudah tentu, saya ingin menegaskan sekali lagi bahawa membuat penipuan adalah menyalahi undang-undang Jangan membuat dan mengedarkan sebarang penipuan untuk Apl, jika tidak, anda hanya akan dihukum oleh undang-undang .
Atas ialah kandungan terperinci Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!