【安卓逆向】 浦X银行签名校验

101 阅读3分钟

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

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

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

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

直接往下跟捋捋逻辑

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

Init这又在初始化什么???   过去看看
System.loadLibrary加载了这个so库 上面还有个native关键词修饰的getSignatures();函数

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

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

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

我抽空自己写一下以我理解的流程 嚼碎了给你)

言归正转 接着来

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

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

采用了静态注册问题不大 来到这个函数
没啥操作直接调用了_Z8init_libP7_JNIEnvP8_jobject  这个函数初始化 跟进 来到这个check_app函数里面  
发现这里调用了这个get_sign这个函数 我们往上看他传入了那些参数 R0寄存器是R4传入的env R1寄存器就是R5传入的jobject R2寄存器就是调用上面的函数的返回值

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

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

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

没有混淆就是为所欲为

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

改好以后直接运行 完美!

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

总结一下:现在安卓逆向的门槛还是挺低的 你们自己悟 这个银行如果加壳(当然了银行基本不会加壳) 就费时间了 还有就是对so文件的保护不够好 关键点很好定位 基本不用动态就能分析出来 混淆也没有 不过混淆也没啥卵用 安全这块无非就是增加逆向分析的时间

另外再跟大家分享白嫖VIP功能的教学视频,谢谢大家的支持!!!

链接:pan.baidu.com/s/13_G2ud6R…

提取码:96tb