前段时间有个朋友联系到我 说有家安全公司招聘(哪家公司我就不说了) 但是面试题目第一题就难着了 这我哪儿能忍 直接干!
拿到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功能的教学视频,谢谢大家的支持!!!
提取码:96tb