Rumah >Java >javaTutorial >Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

王林
王林ke hadapan
2023-04-21 18:49:191971semak imbas

Gabungan dinamik dan statik WhatsApp terbalik

Semua beban berlebihan kaedah 0x01.hook

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);
	});
}

Semua subkelas kelas 0x03.hook

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() {}
});

0x04.cangkuk fungsi eksport pustaka tempatan

// 追踪本地库函数
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);

		}
	});
}

0x05 gabungan dinamik dan statik WhatsApp terbalik

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

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

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.

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

Contohnya, kalau kita nak tengok kandungan pakej com.whatsapp.app.protocol dalam gambar di atas, kita boleh setkan trace("com.whatsapp.app.protocol").

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

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.

Langkah-langkah untuk membalikkan WhatsApp menggunakan gabungan kaedah dinamik dan statik dalam Java

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam