native层 安卓_「安卓逆向」去除某银行app签名校验

首先,祝大家新年快乐!新的一年红红火火!

前段时间有个朋友联系到我 ,说有家安全公司招聘(哪家公司我就不说了) 但是面试题目第一题就难着了。这我哪儿能忍,直接干!

拿到app的时候我心凉了一下 ,这银行我搞个锤子,但是逆向工程师绝不认输!

直接重新签名安装 ,果然不出意外崩溃。

现在勒让我们捋捋思路,在程序一启动就崩溃,说明校验是存放在入口点或者入口页面的初始化函数里面。先掏出我们的逆向工具 jadx反编译一波,找到AndroidManifest.xml文件里面 我们知道入口点比入口页面执行的时机要早 ,直接先从入口点的onCreate()函数入手。

a86c7978c93856b98b1119fe11c766e8.png
48c7e02c1a55df5b41855b3aaf996677.png

直接往下跟捋捋逻辑

Java层其实没啥东西,只要你思路清晰一眼就能看出来 ,这个onCreate()函数首先调用了一些super 然后注册了一些事件 ,下面我们看到了一句代码:

e77d36e45faa6610c22ea5b4c72b6388.png

Init这又在初始化什么??? 过去看看:

018183fa64da0b4c7ed338a4e5d7f543.png

System.loadLibrary加载了这个so库 ,上面还有个native关键词修饰的getSignatures();函数。

这就有点敏感了,心里已经10有8 9确定了签名校验在so层 ,然后这个init又调用了一个native_init函数 传入了一个context ,既然如此就去so看看:

24e09cee77963157445e749f15624c51.png

So文件还是挺多的 直接拖出来 ,放进ida反编译一波。

找到节区分析,逆向分析思路一定得要清晰 ,先不慌搜索注册得函数,先看一波init跟init_array ,不清楚这部操作的小贴友们不要慌 ,推荐学习一下so文件的加载流程以及ELF文件结构 (可能下篇文章会详细讲到,不过市面上也有很多百度一波就行。看不懂就留言我抽空自己写一下以我理解的流程 ,嚼碎了给你)

言归正转,接着来:

49fbeda9c5fd2f49fbe55ce3fb6d7fe9.png

没有东西 ,可以松口气了,要是再有东西就又多了几步了。

接着找到导出函数窗口搜索一波

0ee6772fc83c8ae7702be25d413c053a.png

采用了静态注册问题不大,来到这个函数

dbb532bd579278ee4187d589c0fbf668.png

没啥操作直接调用了_Z8init_libP7_JNIEnvP8_jobject 这个函数初始化,跟进

5e9ebbb78e42a1795e328b83583d3ffd.png

又调用了_Z9check_appP7_JNIEnvP8_jobject函数 ,跟进

来到这个check_app函数里面

d814250b830803dff9634b08880143fc.png

发现这里调用了这个get_sign这个函数,我们往上看他传入了那些参数,R0寄存器是R4传入的env ,R1寄存器就是R5传入的jobject,R2寄存器就是调用上面的函数的返回值。

这里先不看,现在分析到这里我们可以通过他的函数名称确定在这里get获取这个sign签名。

fbe75ebcf6f17cd825321a867a54c837.png

紧接着进行md5 sha系列的签名运算

1856202c51d39c29b63f5f0fd6124caf.png

我们也可以看一下他的运行流程

没有混淆就是为所欲为

找到了这个get_sign获取当前签名了就好办了,直接改这个调用就行,要是要改的干净一点可以从下面的判断入手,直接改nop指令你就得注意下面的寄存器相关的使用了,稍不注意就gg。

改好以后直接运行,完美!

好了这个就讲到这里了,听说月薪小20k ,流下了我月薪1800的泪水!

总结一下:现在安卓逆向安全行业的门槛还是挺低的,你品,你细品。这个银行如果加壳(当然了银行基本不会加壳) 就费时间了,还有就是对so文件的保护不够好,关键点很好定位,基本不用动态就能分析出来 ,混淆也没有,不过混淆也没啥用,对咱逆向安全工程师来说都问题不大!

本面试题案例来源与网络,如有侵权,请联系删除

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值