前言:
当前看官们对“c语言逆向破解”大致比较看重,大家都想要剖析一些“c语言逆向破解”的相关内容。那么小编在网上收集了一些关于“c语言逆向破解””的相关资讯,希望大家能喜欢,看官们快快来学习一下吧!继上一篇《记吾爱的!教我兄弟学Android逆向01 编写第一个Android程序》之后 现在才算开始我的征程!
今天要破解的Demo就是上一篇的app,那个app只能通过对的账户密码 也是就admin登录!
通过反编译修改,绕过验证!让我们随意填写密码!
用到的工具------- Android KillerV1.3.1.0+jdk1.7
第一次打开会提示配置jdk的安装路径!
2.把JDK的路径填好后,然后就可以为所欲为了,把我们的APK拉到我们的这款工具中来 (这里可能会出现一个小问题 如果把APK拉到软件中程序卡在 正在反编译APK源码请稍后.. 解决方式:重新打开软件,然后双击APK历史工程里面要打开的这个APK即可) 然后点击左边的入口就会打开MainActivity.smali(或者别人修复后的版本)
3.找到在MainActivity.smali中找到check方法 如果用户名或者密码有一个不对就会跳转到:cond_0出 然后执行下面的代码 也就是登陆失败! 这里会涉及到一些smali代码 smali代码不用去刻意学 这里看到不会的先自己百度然后结合着我下面的分析 自己去尝试着理解 这里的要求:把下面我分析的这些smali代码理解并且记住(以下截图的盗来的)
4.我现在处理的的APP 用鼠标点击v0就能找到:v0位置 这个地方就是登陆失败
5.这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_**" 如果vA等于vB则跳转到:v**
(2)if-nez vA, vB, :cond_**" 如果vA不等于vB则跳转到:v**
6.小总结
(1)首先程序把我们输入的用户名和密码给了p1和p2 然后把真正的用户名给了v0 再拿p1和v0对比 对比的结果放在v0中 如果这两个值不相等v0就等于0
(2)然后用if-eqz v0, :cond_0这条指令去判断v0是不是0 如果v0等于0 也就是用户名和密码不相等 就跳转到:cond_0位置 执行登录失败 否则继续往下面执行
(3)这里假设用户名输入正确了 程序往下继续执行 后面会进行同样的判断密码是不是相等 只有用户名和密码都是正确的 程序才不会跳转到:cond_0位置执行登录失败
7.结合着上面的总结那么思路来了 我如果不让程序跳转到:cond_0位置 让程序每次在if-eqz v0, :cond_0这条关键指令上继续往下执行 是不是就可以执行登录成功代码了? 那怎么能让它不跳转呢? 我现在有三种思路:
第一种 程序有两个if-eqz 分别是用来判断用户名和密码是否正确的 我把这两个if-eqz都改成if-nez 第二种 我直接把这两条指令删除掉 第三种也是最省事最懒的一种 我直接用goto语句直接一条指令让程序执行跳转登录成的代码 也是可以达到程序破解的目的 这里强调一个问题 修改完smali代码后一定要ctrl+s保存 不然程序还是拿原来的smali代码编译。
8.最后smali修改完成后 把手机连到电脑上面 选择已找到设备 点击左上角的编译 编译完成后点击安装按钮 破解后的apk就成功安装到自己的手机上面了 然后输入错误的用户名和密码会提示登陆成功 说明破解成功
破解前:
破解后:
标签: #c语言逆向破解