Maison >Java >javaDidacticiel >Étapes pour inverser WhatsApp en utilisant une combinaison de méthodes dynamiques et statiques en Java
Dans un article qui vous amène à comprendre l'essence de Frida, nous avons appris à gérer les surcharges de put, passons d'abord en revue le code :
my_class.fun.overload("int" , "int").implementation = function(x,y){ my_class.fun.overload("java.lang.String").implementation = function(x){
C'est-à-dire que nous devons construire un tableau surchargé et imprimer chaque surcharge. Passons directement au code :
//目标类 var hook = Java.use(targetClass); //重载次数 var overloadCount = hook[targetMethod].overloads.length; //打印日志:追踪的方法有多少个重载 console.log("Tracing " + targetClassMethod + " [" + overloadCount + " overload(s)]"); //每个重载都进入一次 for (var i = 0; i <p> De cette façon, nous avons traité toutes les surcharges de méthodes, puis énumérons toutes les méthodes. </p><h4>Toutes les méthodes de la classe 0x02.hook</h4><p>ou allez directement au code : </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); }); }
ou allez à la partie centrale du code :
//枚举所有已经加载的类 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); } }); }
C'est enfin l'heure du combat réel. Les codes ci-dessus sont assemblés pour former un script. En fait, ce script est également introduit dans Awesome-. frida. Le code est ici, mais il a un petit bug Après avoir été modifié par Huluwa, enfin disponible.
Essayons certaines de ses fonctions principales. La première est la fonction exportée de la bibliothèque locale.
setTimeout(function() { Java.perform(function() { trace("exports:*!open*"); //trace("exports:*!write*"); //trace("exports:*!malloc*"); //trace("exports:*!free*"); }); }, 0);
Ce que nous accrochons
est la fonction open()
, exécutez-la et voyez l'effet : 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
Comme le montre l'image*!open*
correspond selon les règles régulières openlog, open64
et d'autres fonctions exportées, a accroché toutes ces fonctions et a imprimé leurs paramètres et valeurs de retour.
Quelle que soit la partie que vous souhaitez voir ensuite, jetez-la simplement dans jadx
, "analysez-la" statiquement, parcourez-la vous-même ou recherchez-la en fonction de la chaîne.
com.whatsapp.app.protocol
dans l'image ci-dessus, vous pouvez définir trace("com.whatsapp.app.protocol"). 🎜🎜🎜🎜🎜🎜Vous pouvez voir les fonctions dans le package, les méthodes, y compris les surcharges, les paramètres et les valeurs de retour, sont tous imprimés. C'est tout le charme du script frida
. 🎜🎜Bien sûr, le script n'est qu'un outil après tout. Votre compréhension de Java
, de l'application Android et votre créativité sont cruciales. 🎜🎜 Ensuite, vous pouvez utiliser le module Xposed pour voir quels modules d'autres ont créés pour Whatsapp
, quelles fonctions de hook
, quelles fonctions sont implémentées et apprendre à les écrire vous-même. 🎜🎜🎜🎜🎜 Bien sûr, je voudrais souligner à nouveau que la triche est illégale. Ne créez et ne distribuez aucune application de triche, sinon des sanctions légales n'attendront que vous. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!