这是一道不太会的安卓题,使用了规则二,即提供一组可用的用户名及对应注册码。安装后试运行了一下,有正确及错误提示。
按步就班地开始先看看java层的代码。JEB拖入APK后发现,JAVA层的代码比较少,也没什么业务功能,校验按钮的响应函数就是检查输入是否为空,并调用native层函数校验并显示结果,如下:
于是接着静态看hello-jni
这个native库的代码。结果发现没有JNI_OnLoad
函数,stringFromJNI
函数也好奇怪,如下图。
还有两个比较可疑的导出函数xxxxxxxxxx1
和 xxxxxxxxxx2
,这两个函数的奇怪情况和stringFromJNI
是一样一样的,整个nativ库中就没有大段看起来比较“正常”的代码。这完全超出了我的认知,感觉大脑不够用了,心里好慌乱,不知道作者是用了什么黑科技或黑技术。
想不明白,直接上手干,默默掏出小米4C手机,动态调试。在stringFromJNI
函数处断下后,尝试单步跟踪,结果没跟住,直接就跑飞了。又尝试了几次,不是跑飞,就是异常,而且最后结果还不对了,本来的恭喜成功
变成了输入错误
。
似乎面临的一切都是未知的,未知中又会诱发出诸多猜想。我猜想,作者应该是通过黑科技隐藏了JNI_OnLoad
函数,JNI_OnLoad
函数会改写代码。于是开始尝试从libart.so
着手,跟踪LoadNativeLibrary
、artFindNativeMethod
函数。一切迹象表明,确实没有JNI_OnLoad
函数,stringFromJNI
函数的入口也是对的,似乎也没有SMC。
于是又回到想方设法跟踪stringFromJNI
函数上来。经过坚持不懈地努力再努力,我终于发现这个native库中arm和thumb代码混得比较多,有些ida解析的不对,又加上可能有断点或单步的临时断点,这样会影响代码执行,轻则跑飞,次重则异常,app重启,再重就是手机黑屏无反应。
不管路途多么坎坷,至少已经上路了,现在至少能看到稍微比较“正常”一点的代码了。
再经过我坚持不懈地努力,我大概能看出这可能是VM代码或者相类似的。找到了几个代码片断,功能有从堆栈读取或写入值,比较,异或操作,还有三个功能固定的函数,整理如下:
还原代码,我是不可能做的了。也就只会体力劳动下,人肉代码跟踪。
经过我坚持不懈地努力,大致了解了业务流程。粗略的过程是:先取出name和serial,name生成20字节的hash,serial进行unhex,对hash进行RC4加密,最后与unhex的serial比较。
求解是不用求了,一切都让app告诉我们。所以我又一次次人肉代码跟踪,在一次次的app崩溃到系统崩溃中终于迎来了曙光。经过我最后一次坚持不懈地努力,我终于找到了serial:17726331DA0FE737149C8202。
public void Btn1_Click(View arg6) {
String v2;
String v0
=
this.text.getText().toString();
String v1
=
this.text2.getText().toString();
if
(v0
=
=
null || (v0.isEmpty())) {
v2
=
"name为空"
;
}
else
{
if
(v1 !
=
null) {
if
(v1.isEmpty()) {
}
else
{
System.loadLibrary(
"hello-jni"
);
v2
=
this.stringFromJNI(v0, v1);
goto label_21;
}
}
v2
=
"serial为空"
;
}
label_21:
AlertDialog$Builder v3
=
new AlertDialog$Builder(HelloJni.mContext);
v3.setTitle("");
v3.setMessage(((CharSequence)v2));
v3.show();
}
public void Btn1_Click(View arg6) {
String v2;
String v0
=
this.text.getText().toString();
String v1
=
this.text2.getText().toString();
if
(v0
=
=
null || (v0.isEmpty())) {
v2
=
"name为空"
;
}
else
{
if
(v1 !
=
null) {
if
(v1.isEmpty()) {
}
else
{
System.loadLibrary(
"hello-jni"
);
v2
=
this.stringFromJNI(v0, v1);
goto label_21;
}
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-5-17 13:56
被kanxue编辑
,原因: