欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

安卓应用程序的逆向工程

来源:本站整理 作者:佚名 时间:2017-09-20 TAG: 我要投稿
Java.perform(function () {
    var MainActivity = Java.use('com.punsec.demo.MainActivity');
    MainActivity.onCreate.implementation = function(a) {
        this.onCreate(a);
        send({'encrypted':this.getString(2131099669)});
    };
    var base64 = Java.use('android.util.Base64');
    base64.decode.overload('java.lang.String', 'int').implementation = function(x, y) {
        send('Base64 Encoded : ' + x);
        var buf = new Buffer(base64.decode(x, y));
        send('Base64 Decoded : ' + buf.toString());
        return base64.decode(x, y);
    }
 
});
再一次运转咱们的python法式将会获得下面的输入:
$ python punsec.py
[+] Running
[+] Process found
[*] Base64 Encoded : TXlTdXBlclNlY3JldEwzM3RQYXNzdzByZA==
[*] Base64 Decoded : MySuperSecretL33tPassw0rd
Hmm, 彷佛咱们曾经胜利了。不要发急,如今让咱们再来细心看一下咱们的反编译代码:
if (Base64.encodeToString(
Util.a(paramAnonymousView,
Util.a(new String(
Base64.decode(MainActivity.this.getString(2131099683), 0)
)
)
),
0).trim().equals(str))
在下面的代码中,有两次对 Util.a 函数的挪用然则都采纳的分歧的参数范例,咱们曾经hook了 Base64.decode() 函数,以是如今让咱们用下面的代码对 Util.a() 创立一个 hook :
Java.perform(function () {
    var MainActivity = Java.use('com.punsec.demo.MainActivity');
    MainActivity.onCreate.implementation = function(a) {
        this.onCreate(a);
        send({'encrypted':this.getString(2131099669)});
    };
    var base64 = Java.use('android.util.Base64');
    base64.decode.overload('java.lang.String', 'int').implementation = function(x, y) {
        send('Base64 Encoded : ' + x);
        var buf = new Buffer(base64.decode(x, y));
        send('Base64 Decoded : ' + buf.toString());
        return base64.decode(x, y);
    }
    var Util = Java.use('com.punsec.demo.Util');
    Util.a.implementation;
 
});
运转咱们的python代码,而后可以或许获得如下的输入:
$ python punsec.py
[+] Running
[+] Process found
[!] Error: a(): has more than one overload, use .overload() to choose from:
.overload('java.lang.String')
.overload('java.lang.String', 'javax.crypto.SecretKey')
.overload('[B', 'javax.crypto.SecretKey')
这彷佛呈现了一点差错。看起来是咱们的Util类中有函数重载(有雷同的办法称号然则领有分歧的参数)。为了降服这个成绩, frida供应给咱们额定的办法 overload(),经由过程这个办法,咱们可以或许显式地设置哪一个办法来 override/hook。咱们将会 hook Util.a(String, SecretKey)函数(由于它是一个卖力加密的函数)来为了停止下一步阐发:
 

然则咱们怎样能力辨认出这是一个加密函数的呢?起首可以或许看到这个函数的前往范例是byte,很明显意味着并无前往一个string范例,同时,当地暗码初始化为1来作为第一个参数通报:
 

如今,让咱们来改动咱们的js代码为了可以或许正当地hook这个函数:
Java.perform(function () {
    var MainActivity = Java.use('com.punsec.demo.MainActivity');
    MainActivity.onCreate.implementation = function(a) {
        this.onCreate(a);
        send({'encrypted':this.getString(2131099669)});
    };
    var base64 = Java.use('android.util.Base64');
    base64.decode.overload('java.lang.String', 'int').implementation = function(x, y) {
        send('Base64 Encoded : ' + x);
        var buf = new Buffer(base64.decode(x, y));
        send('Base64 Decoded : ' + buf.toString());
        return base64.decode(x, y);
    }
    var Util = Java.use('com.punsec.demo.Util');
    Util.a.overload('java.lang.String', 'javax.crypto.SecretKey').implementation = function(x, y) {

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载