简单过搜狗输入法签名校验
群里聊天,某中二青年发来一张截图那既然有很明显的文字提醒,想必跟踪起来也是很方便的,AndroidKiller反编译下(这种app是不会加固的,最多混淆),搜索盗版关键词,在value/string.xml下找到后去代码层索引键名称check_key,发现
if (!native_setup(SogouAppApplication.mAppContxet)) {
Toast.makeText(SogouAppApplication.mAppContxet, SogouAppApplication.mAppContxet.getString(R.string.check_key), 1).show();
}
点击native_setup后发现是个native方法,但这个类参数,方法都很多,直接搜索loadLibriay也没有搜到东西,由于这个恶native方法名字还是比较特殊的,直接notepad++全局文件搜索,最终在assets/raw下的sogouime下找到,ida载入,发现导出函数就两个,直接进入jni_onload
void *__fastcall JNI_OnLoad(int a1)
{
int v2; // r5@5
int v3; // r5@5
int v4; // @1
v4 = 0;
if ( (*(int (**)(void))(*(_DWORD *)a1 + 24))() )
return (void *)-1;
if ( sub_60B0() < 0 )
{
_android_log_print(6, "SogouIME-JNI", "ERROR: sogouime native registration failed\n");
return (void *)-1;
}
v2 = operator new(0x10u);
sub_CD8C();
dword_F1B90 = v2;
v3 = operator new(1u);
sub_A900();
dword_F1B94 = v3;
return &loc_10004;
}
既然是动态注册,那就去寻找注册方法就行,代码中已经有很明显的log提示,那直接双击进入sub_60b0,找到结构体偏移地址off_EE028,
.data:000EE274 DCD aNative_setup ; "native_setup"
.data:000EE278 DCD aLandroidCont_1 ; "(Landroid/content/Context;)Z"
.data:000EE27C DCD sub_6A14+1
双击进入sub_6A14
signed int __fastcall sub_6A14(int a1, int a2)
{
int v2; // r6@1
int v3; // r4@1
signed int result; // r0@2
int v5; // r5@4
v2 = a2;
v3 = a1;
if ( sub_65F0() && (v5 = operator new(0x4B8u), sub_C87C(), v5) )
{
sub_6044(v3, v2, v5);
result = 1;
}
else
{
result = 0;
}
return result;
}
可以看到此处有个判断,一个个看,双击进入sub_65F0
"getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
if ( !sub_608C(v2) )
{
if ( v14 )
{
v15 = sub_6470(v2, v8, v14);
if ( !sub_608C(v2) )
{
if ( v15 )
{
((void (__fastcall *)(int, int))start)(v2, v13);
((void (__fastcall *)(int, int))start)(v2, v10);
v16 = (*(int (__fastcall **)(int, int))(*(_DWORD *)v2 + 124))(v2, v15);
v17 = (*(int (__fastcall **)(int, int, const char *, const char *))(*(_DWORD *)v2 + 376))(
v2,
v16,
"signatures",
"
看到这些字眼就知道是获取签名了,最终可以发现在获取到toCharString的签名后通过findClass调用了java中的md5方法与正确签名进行对比,如果签名相同返回为0,这里判断了<=0赋给返回值,那正确情况下返回值就是1,也就是true,那直接修改汇编代码mov r0,#1
在ida Options下打开显示机器码
直接在pop前将thumb指令改为01 20保存到文件即可
测试截图
我只想知道你是个妹纸?{:1_918:} 大佬,麻烦教程发的详细点好么,ida以前我都不知道,我看的似懂非懂,但是我对楼主的教程很痴迷,研究了半天没搞懂,麻烦把教程再详细点! 很认真的看完了,厉害了我的繁华妹子 {:301_971:}只看懂一点点...还需要学习... 支持一下大神 淡然出尘 发表于 2017-1-11 11:49
很认真的看完了,厉害了我的繁华妹子
又被淡然大神嘲讽了 还在学习中。IDA f5后的代码还是不太看得懂。。。 毕竟是祖师爷 正在想 还原一个公交车查询的校验码生成的.so。。。 大神有空看下么。。 学习了 膜拜繁华大佬