• 周二. 7 月 16th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

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

admin

11 月 28, 2021

###

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

下面讲解一个案例:

##

###

分析这个题目:

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

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

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

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

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

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

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

###

我们的目的是什么,

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

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

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

就是这个思路,

###

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

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

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

把类赋值给一个变量,

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

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

没有参数会报错的,

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

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

这样就绕过了

###

上面讲的都是方法论, 

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

###

上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()

###

#####

发表回复