项目代码

https://github.com/aprz512/Android-Crack/tree/master/unicorn

目标

模拟LV4方法的执行。

IDA分析

搜索一下方法,发现没有lv4:

image.png

那就是动态注册了。

去看JNI_OnLoad方法:

jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
  int Class; // r0
  _JNIEnv *v5; // [sp+20h] [bp-10h] BYREF

  v5 = 0;
  CheckPort23946ByTcp();
  readStatus();
  _JavaVM::GetEnv((_JavaVM *)vm, (void **)&v5, 65540);
  Class = _JNIEnv::FindClass(v5, "com/sec/udemo/MainActivity");
  _JNIEnv::RegisterNatives(v5, Class, off_1D550, 1);
  return 65540;
}

看off_1D550:

.data.rel.ro:0001D550 FA 9D 01 00                   off_1D550 DCD aSignLv4                  ; DATA XREF: JNI_OnLoad+52↑o
.data.rel.ro:0001D550                                                                       ; JNI_OnLoad+54↑o
.data.rel.ro:0001D550                                                                       ; .text:off_AA5C↑o
.data.rel.ro:0001D550                                                                       ; "sign_lv4"
.data.rel.ro:0001D554 6D 9C 01 00                   DCD aLjavaLangStrin                     ; "(Ljava/lang/String;)Ljava/lang/String;"

确认sign_lv4是动态注册的。

资料

上一篇使用了无名侠修改过的项目,这里补下其他资料,作者也是摸着石头过河,来一起讨论啊:

https://bbs.kanxue.com/thread-253868.htm

github: https://github.com/P4nda0s/AndroidNativeEmu

笔记: https://app.yinxiang.com/fx/a6cc6633-a93f-4111-a06a-cccd5fa39e0f

模拟

我们先按照上一篇的逻辑,直接调用一下lv4方法: