AliCrackme2解析

  • 打开so,导出表找到了函数,不是动态注册的,直接看

  v5 = (unsigned __int8 *)((int (__fastcall *)(JNIEnv *, char *, _DWORD))(*v3)->GetStringUTFChars)(v3, v4, 0);
  v6 = off_628C; //wojiushidaan
  while ( 1 )
  {
    v7 = (unsigned __int8)*v6;
    if ( v7 != *v5 )
      break;
    ++v6;
    ++v5;
    v8 = 1;
    if ( !v7 )
      return v8;
  }
  return 0;
  • wojiushidaan这里的字符串应该被改了,输入后提示不正确
  • 附加到程序立即闪退 马上猜想有反调试
  • 作者明显想让我们过他的反调试,虽然可以通过dddump他当时的内存拿字符串,不过还是看看他有什么反调试手段
AliCrackme2解析_第1张图片
image.png
  • 过了这个函数就会退出,进去看里面是什么
AliCrackme2解析_第2张图片
image.png
  • 创建线程,猜想是开了一个线程循环检测
AliCrackme2解析_第3张图片
image.png
  • 过了这里就退了,证明的确是开了线程来检测的
AliCrackme2解析_第4张图片
image.png
  • 静态分析的时候发现这里没有初始化
AliCrackme2解析_第5张图片
image.png

AliCrackme2解析_第6张图片
image.png
  • 在JNI_Onload开头的时候依然没有, 基本能确定是上面的循环释放出了代码,地址也很近
AliCrackme2解析_第7张图片
image.png

AliCrackme2解析_第8张图片
image.png
  • 果然是在前面释放出代码
AliCrackme2解析_第9张图片
image.png
  • 这里有一个死循环,极大可能就是这里在执行检测的代码
  • 进去发现部分地方还未初始化,静态看来看不了,还是要调试起来
AliCrackme2解析_第10张图片
image.png
  • 果然断到这个循环来了
  • 对应sub_130c 但是里面的代码很难看懂 似乎是有混淆处理的
  • 这里线索就断了 因为130c全是混淆 继续下去就中了作者的套了...
  • 这里猜想他会读取tracerpid 那么他就会使用fopen之类的来读取status文件
AliCrackme2解析_第11张图片
image.png
  • 看看我们发现了什么?
  • 由于它是循环读的,改标志什么的不存在的,现在我们大概知道作者怎么反调试的了
  • 所以我们干嘛和他玩反调试呢...明着就是让我们跳坑嘛,然鹅我们根本不需要调
image.png
  • 这明摆着是答案,运行起来看看这里的值就完事了
  • 我的手机dd命令有问题...所以换一种kill -19 [pid]挂起整个进程 这个时候附加就可以当场抓获
AliCrackme2解析_第12张图片
image.png
  • 如果是快速解题的话,知道内存里有真实数据,直接去找就完事了..
  • 密码aiyou,bucuoo

你可能感兴趣的:(AliCrackme2解析)