专栏名称: 吾爱破解论坛
吾爱破解论坛致力于软件安全与病毒分析的前沿,丰富的技术版块交相辉映,由无数热衷于软件加密解密及反病毒爱好者共同维护,留给世界一抹值得百年回眸的惊艳,沉淀百年来计算机应用之精华与优雅,任岁月流转,低调而奢华的技术交流与探索却
目录
相关文章推荐
天天看余杭  ·  永久封禁!连发公告 ·  2 天前  
天天看余杭  ·  永久封禁!连发公告 ·  2 天前  
绿盟科技CERT  ·  【处置手册】Apache ... ·  2 天前  
中国能源报  ·  世界最大吨位,刷新纪录! ·  3 天前  
中国能源报  ·  世界最大吨位,刷新纪录! ·  3 天前  
科技日报  ·  现场试验成功! ·  3 天前  
科技日报  ·  现场试验成功! ·  3 天前  
格斗迷  ·  “三无青年“白大拿的“命中贵人” ·  5 天前  
格斗迷  ·  “三无青年“白大拿的“命中贵人” ·  5 天前  
51好读  ›  专栏  ›  吾爱破解论坛

【Android 原创】简单过搜狗输入法签名校验

吾爱破解论坛  · 公众号  · 互联网安全  · 2017-01-11 16:25

正文

群里聊天,某中二青年发来一张截图
 
那既然有很明显的文字提醒,想必跟踪起来也是很方便的,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; // [sp+4h] [bp-14h]@1

  v4 = 0;
  if ( (*(int (**)(void))(*(_DWORD *)a1 + 24))() )
    return (void *)-1;
  if ( sub_60B0()   {
    _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[/mw_shl_code]
双击进入sub_6A14
[mw_shl_code=c,true]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",
                    "[Landroid/content/pm/Signature;");


看到这些字眼就知道是获取签名了,最终可以发现在获取到toCharString的签名后通过findClass调用了java中的md5方法与正确签名进行对比,如果签名相同返回为0,这里判断了
在ida Options下打开显示机器码
 
直接在pop前将thumb指令改为01 20保存到文件即可

测试截图

--官方论坛

www.52pojie.cn

--推荐给朋友

公众微信号:吾爱破解论坛

或搜微信号:pojie_52

推荐文章
天天看余杭  ·  永久封禁!连发公告
2 天前
天天看余杭  ·  永久封禁!连发公告
2 天前
中国能源报  ·  世界最大吨位,刷新纪录!
3 天前
中国能源报  ·  世界最大吨位,刷新纪录!
3 天前
科技日报  ·  现场试验成功!
3 天前
科技日报  ·  现场试验成功!
3 天前
Cocoa开发者社区  ·  怎样避免脆弱的代码
8 年前
晚安少年  ·  对方迟迟不求婚该怎么办?
7 年前
手艺门  ·  当众试爱?还是默默对你好......
7 年前