Java에서 동적 및 정적 방법의 조합을 사용하여 WhatsApp을 반전시키는 단계
역 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 id="x-hook-클래스의-모든-메서드">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
如图所示*!open*
根据正则匹配到了openlog
、open64
等导出函数,并hook了所有这些函数,打印出了其参数以及返回值。
接下来想要看哪个部分,只要扔到jadx
里,静态“分析”一番,自己随便翻翻,或者根据字符串搜一搜。
比如说我们想要看上图中的com.whatsapp.app.protocol
包里的内容,就可以设置trace("com.whatsapp.app.protocol")
。
可以看到包内的函数、方法、包括重载、参数以及返回值全都打印了出来。这就是frida
脚本的魅力。
当然,脚本终归只是一个工具,你对Java
、安卓App的理解,和你的创意才是至关重要的。
接下来可以搭配Xposed module看看别人都给whatsapp
做了哪些模块,hook
rrreee

그림과 같이
*!open*
는 일반 규칙openlog
, open64
및 기타 내보낸 함수에 따라 일치하고 이러한 모든 함수를 연결하고 해당 매개변수와 반환 값을 인쇄합니다.
다음에 보고 싶은 부분이 무엇이든 jadx
에 넣고, 정적으로 "분석"하거나, 직접 찾아보거나, 문자열을 기반으로 검색하세요.

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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
