本人接触Android不久,但Android开发不是我的主要目的,工作上需要用到逆向,现本文尝试分析注册机程序,我相信在逆向方面会有一些基础了解。本次调试过程,希望可以帮助到您,本人水平有限,若您发现有错误之处,恳请指正。
电脑: Window10
手机: AndroidPhone(Version >=5.0)本人使用Redmi note 4x
环境: Java 1.8.0_121
调试: JEB V2.2.7
可通过adb命令安装,命令:adb install 案例apk7.apk
或
直接下载到手机上从文件管理处安装。
准备搞它
可以看到如下界面,Manifest就是xml文件,Certificate是证书,Bytecode是字节码,Resources是资源。
双击Bytecode
说下快捷键:Q键,在切换smali代码和java代码中切换。
关键方法checkSN()
静态分析结果
这是一个boolean返回值的方法,该将用户名和注册码作为参数传进来,默认返回false。
当用户名为空时,直接返回false。
如果用户名长度不等于0且注册码不等于空且注册码长度为16位,则计算MD5。当md5值跟传进来的注册码一致时,将返回true。
我们要得到它的值,就是我们的注册码。
我们在这个地方下断点:
使用Q键切换到smali代码,使用CTRL+B下断点
下好断点后,点击菜单栏的Debugger的Start...
点击确定
选择模拟器,搜索进程com.qianyu.zhuceji
点击Attach
出现这个界面
打开手机注册机APP
用户名输入111
注册码输入01234567890123456
点击注册按钮
点击单步跳过
此时v6有值了。
修改v6寄存器的类型为string
值变为""685a9811e8497716""
记录下该字符串。
点击停止调试
注册机程序自动退出。
我们重新打开注册机APP,用户名输入111,注册码输入"685a9811e8497716"
提示注册成功。
本次注册机的app比较简单注册机程序未经过加壳,经过简单的反编译后,稍作smali代码静态分析,就可以轻松动态调试。
个人接触Android不久,水平有限,对于博客有错误的地方,恳请您积极纠正,谢谢您!
若本文对您有帮助,方便请点个赞噢。附件链接