181124 逆向-2018“柏鹭杯”厦大邀请赛初赛(Re1、2)

总体来说逆向的题目质量挺高~感觉学到了不少东西=-=
就是第三题放题时间有点晚233没有公网的情况下做题难度确实比较大
欢迎各位师傅指出疏漏错误和交流~

Re1

JAVA层

用JEB查看反编译代码,JAVA层做了如下操作

有点绕,不知道是出题人故意还是无意地,这个处理写的很蛋疼
除了上述列出的字符以外都是保留不变的
output的范围是彼此分开的,因此可以写出该处理的反函数

def decode(x):
    if(x>48 and x<57):
        return x+1
    elif(x>97 and x<97+26):
        return 123-x+97
        return
    elif(x>=65 and x<=65+26):
        return 91-x+65
    else:
        return x

接下来将处理过后的输入和this.b()送入native函数this.b(String, String)
this.b()通过getPackageInfo.signatures来获得应用签名,是一个固定值

最简单的方法当然就是直接JEB动态调试挂上去,但是运行起来发现根本没有输入框,仅有一个Check按钮
查看代码感觉没有什么隐藏的,于是找来res/layout/activity_main.xml发现

把它删掉再重打包就可以看到输入框了,当然这样重打包会导致签名不一样233

但是不重打包的话,又会由于输入内容为空而不会进入到b方法的调用中,所以动态调试就陷入一个死循环的尴尬了233

除了动态调试以外,还有两个方法在不进行重打包的情况下拿到签名:

  1. 编写应用取出“第三方”APK的签名
  2. Hook

Hook对我来说比较熟悉,所以比赛的时候用的是Xposed:

XposedHelpers.findAndHookMethod(
                    "com.example.crackme.MainActivity",
                    lpparam.classLoader,
                    "onClick",
                    View.class,

                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);

                            String md5 = (String)XposedHelpers.callMethod(param.thisObject, "b");
                            Log.e("test", "get md5: " + md5);
                        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值