安卓逆向7,frida小练习,hook java 层密码校验函数,绕过密码验证,进入下一个界面

###

具体怎么使用这个frida来逆向,来hook?

下面讲解一个案例:

##

 

###

分析这个题目:

第一步:这个是打开apk进入了这个页面,主界面有一个输入框,输入按钮,所以这个按钮应该是在apk的主界面,

第二步,我就要进入主界面的源码,看看源码,

第三步,既然要看源码,所以先apk反编译,拿到源代码,如果有壳,要先脱壳,才能拿到源代码,这个小app是没有加固的,

第四步,拿到源代码之后去找application文件,看看主界面是在哪一个java文件,看看这个逻辑是什么,点击按钮是发生了什么?

onCreate方法,这个就是进入一个页面首先执行这个方法,然后就是生成页面

onclick方法,先拿到了输入框的密码,和他自己的密码对比,就是if里面校验成功,就是return,否则就是校验失败,

securityCheck,这个就是检查密码是否一直,如果是真就是进入这个分支,否则就是校验失败的分支,

另外native securityCheck,这个就是说明securityCheck这个函数不是在java代码里面的,是在so库里面的,

而且你放到这个方法右键,是找不到这个java代码的来源的,是封装到so库里面的,这种需要另外的方法hook,

 

 

###

我们的目的是什么,

拿到判断的逻辑,我们让if里面的值一直都是TRUE,不让他FALSE进入另一个分支,

这样不管是我们输入什么,都是正确的,

所以我们要hook到这个函数,修改这个函数,

就是这个思路,

 

###

hook这个securitycheck的方法,强行改成TRUE,

代码解释,因为是java应用层的hook,所以要使用java模块 ,

怎么找这个类名,可以通过jadx,右键复制类名就可以了com.yaotong.crackme.MainActivity

 

 java.use就是使用这个类,

把类赋值给一个变量,

然后这个变量再去调用方法,securityCheck

然后重写这个方法,从写赋值这个函数,参数要看你要hook的函数是不是有参数,

没有参数会报错的,

这样就hook成功了,然后你输入任意的内容,就会直接打印出来i am here 就是hook成功了,

 

不用管这个方法里面做了什么,我们只管输出,

这样就绕过了

 

 

###

上面讲的都是方法论, 

这个案例比较简陋,不具有实战性,但是这个展示了frida的应用,这个是方法论,具体的应用,还需要不断实践才可以,

另外就是这个最重要的,是分析java代码,梳理出hook的思路,

###

上python代码

import frida
import sys


def on_message(message,data):
    if message["type"] == "send":
        print("[*]{0}".format(message["payload"]))
    else:
        print(message)


jscode = """
Java.perform(function(){
    var TestSig = Java.use("com.yaotong.crackme.MainActivity")
    // var mystr = Java.use('java.lang.String');   这一句可以不要,

    TestSig.securityCheck.implementation = function(str){
        send("i am here");
        return true;
    }

})
"""


process = frida.get_usb_device().attach("自毁程序密码")
script = process.create_script(jscode)
script.on("message",on_message)
print("[*] running CIF")
script.load()
sys.stdin.read()

###

 

 

 

 

#####

posted @ 2021-08-24 09:32  技术改变命运Andy  阅读(752)  评论(0编辑  收藏  举报