>  기사  >  Java  >  Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

王林
王林앞으로
2023-04-21 18:49:191858검색

역 WhatsApp의 동적 및 정적 조합

0x01.hook 메서드의 모든 오버로드

Frida의 본질을 이해하는 데 도움이 되는 기사에서 put의 오버로드를 처리하는 방법을 배웠습니다. 먼저 코드를 검토해 보겠습니다.

my_class.fun.overload("int" , "int").implementation = function(x,y){
my_class.fun.overload("java.lang.String").implementation = function(x){

즉, 오버로드된 배열을 구성하고 각 오버로드를 인쇄해야 합니다. 코드로 직접 가보겠습니다:

//目标类
var hook = Java.use(targetClass);
//重载次数
var overloadCount = hook[targetMethod].overloads.length;
//打印日志:追踪的方法有多少个重载
console.log("Tracing " + targetClassMethod + " [" + overloadCount + " overload(s)]");
//每个重载都进入一次
for (var i = 0; i <p> 이런 식으로 모든 메소드 오버로딩을 처리한 후 모든 메소드를 열거했습니다. </p><h4>0x02.hook 클래스의 모든 메서드</h4><p>또는 코드로 직접 이동: </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);
	});
}

0x03.hook 클래스의 모든 하위 클래스

또는 코드의 핵심 부분으로 이동:

//枚举所有已经加载的类
Java.enumerateLoadedClasses({
	onMatch: function(aClass) {
		//迭代和判断
		if (aClass.match(pattern)) {
			//做一些更多的判断,适配更多的pattern
			var className = aClass.match(/[L]?(.*);?/)[1].replace(/\//g, ".");
			//进入到traceClass里去
			traceClass(className);
		}
	},
	onComplete: function() {}
});

0x04.hook 로컬 라이브러리의 기능

// 追踪本地库函数
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. 역방향 WhatsApp의 동적 및 정적 조합

드디어 실제 전투 시간입니다. frida. 코드는 여기에 있지만 Huluwa에 의해 수정된 후 마침내 사용 가능해졌습니다.

주요 기능 중 일부를 사용해 보겠습니다. 첫 번째는 로컬 라이브러리의 내보내기 기능입니다.

setTimeout(function() {
	Java.perform(function() {
		trace("exports:*!open*");
		//trace("exports:*!write*");
		//trace("exports:*!malloc*");
		//trace("exports:*!free*");
	});
}, 0);

우리가 후크하는 것은 open() 함수입니다. 이를 실행하고 효과를 확인하세요: hook的是open()函数,跑起来看下效果:

$ frida -U -f com.whatsapp -l raptor_frida_android_trace_fixed.js --no-pause

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

如图所示*!open*根据正则匹配到了openlogopen64等导出函数,并hook了所有这些函数,打印出了其参数以及返回值。

接下来想要看哪个部分,只要扔到jadx里,静态“分析”一番,自己随便翻翻,或者根据字符串搜一搜。

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

比如说我们想要看上图中的com.whatsapp.app.protocol包里的内容,就可以设置trace("com.whatsapp.app.protocol")

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계

可以看到包内的函数、方法、包括重载、参数以及返回值全都打印了出来。这就是frida脚本的魅力。

当然,脚本终归只是一个工具,你对Java、安卓App的理解,和你的创意才是至关重要的。

接下来可以搭配Xposed module看看别人都给whatsapp做了哪些模块,hookrrreee

Java 동적 및 정적 메서드를 결합하여 WhatsApp을 반전시키는 방법

Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계그림과 같이*!open*는 일반 규칙openlog, open64 및 기타 내보낸 함수에 따라 일치하고 이러한 모든 함수를 연결하고 해당 매개변수와 반환 값을 인쇄합니다.

다음에 보고 싶은 부분이 무엇이든 jadx에 넣고, 정적으로 "분석"하거나, 직접 찾아보거나, 문자열을 기반으로 검색하세요.

🎜역방향 WhatsApp과 결합된 Java 동적 및 정적 방법🎜🎜예를 들어 , 위 그림에서 com.whatsapp.app.protocol 패키지의 내용을 보려면 trace("com.whatsapp.app.protocol"). 🎜🎜역방향 WhatsApp과 결합된 Java 동적 및 정적 방법🎜🎜역방향 WhatsApp과 결합된 Java 동적 및 정적 방법🎜🎜에서 기능을 볼 수 있습니다. 오버로드를 포함한 패키지, 메소드, 매개변수 및 반환 값이 모두 인쇄됩니다. 이것이 frida 스크립트의 매력입니다. 🎜🎜물론 스크립트는 결국 도구일 뿐입니다. Java, Android 앱에 대한 이해와 창의력이 중요합니다. 🎜🎜 다음으로 Xposed 모듈을 사용하여 다른 사람들이 whatsapp용으로 만든 모듈이 무엇인지, hook의 어떤 기능이 구현되어 있는지 확인하고 직접 작성하는 방법을 배울 수 있습니다. 🎜🎜🎜🎜🎜 물론, 치트를 만드는 것은 불법이라는 점을 다시 한 번 강조하고 싶습니다. 앱에 대한 치트를 만들고 배포하지 마세요. 그렇지 않으면 법의 처벌을 받게 됩니다. 🎜

위 내용은 Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제