您现在的位置是:主页 > news > 美国做电商网站有哪些内容/百度怎么提交收录

美国做电商网站有哪些内容/百度怎么提交收录

admin2025/5/16 17:11:12news

简介美国做电商网站有哪些内容,百度怎么提交收录,b2c中日外贸有哪些网站做的好,中山市政府网站建设最近健身、工作、学习啥的有点忙,感觉老久没更新文章了,今天来水一片其实我并不推荐使用 AndroidNativeEmu, 他并不是一个好的选择弊端AndroidNativeEmu 只能模拟未加壳的 So很多 jni 函数并没有实现,容易被针对很多 java 函数也没…

美国做电商网站有哪些内容,百度怎么提交收录,b2c中日外贸有哪些网站做的好,中山市政府网站建设最近健身、工作、学习啥的有点忙,感觉老久没更新文章了,今天来水一片其实我并不推荐使用 AndroidNativeEmu, 他并不是一个好的选择弊端AndroidNativeEmu 只能模拟未加壳的 So很多 jni 函数并没有实现,容易被针对很多 java 函数也没…

最近健身、工作、学习啥的有点忙,感觉老久没更新文章了,今天来水一片

其实我并不推荐使用 AndroidNativeEmu, 他并不是一个好的选择

弊端AndroidNativeEmu 只能模拟未加壳的 So

很多 jni 函数并没有实现,容易被针对

很多 java 函数也没有实现

貌似作者停止维护项目了结论如果不是只会用 python 的话,不建议使用

特色elf 文件解析及 so 加载

栈支持

内存管理

文件系统

JNI 支持

常见 syscall 模拟支持

核心目录

底层系统调用模拟实现

e33ae80278ce5cfc94134605837d520f.png

JNIenv 模拟实现调用

5eb64a7d77b2165d5ac68f638a895612.png

对抗:因为本身 Emu 有许多系统函数和 env 并没有实现,可以利用这一点对 Emu 模拟调用进行对抗。

反观,我们也可以自己进行函数补全来避免被对抗。

JNI 实现源码分析

源码例子中

7212513b13f6b5fcfe8d9c87b8d364e8.png

实例话 Emulator

首先实例化了 Emulator

c56b69e295bfa39eb2a15e945ef78b3a.png

f1478ab4248018f6a633ab0ffd366dc6.png

2 个参数虚拟文件系统目录

目录位置

3074402fdf901552c8e2d818e39826e1.png

默认设置在这里了。

接下来要模拟CPU就要进行映射了!

c5014e936d0b25030f05cddda8e9fddf.png

写入寄存器,堆栈大小地址参数,这些在 Emu 中是固定值(可以自行配置)正常情况这么大的空间也是够用了的。

b373e18e03b7bb5d07fb55d673e20a02.png这些步骤在自己写 unicorn 的时候也是同样的写法

b1a03e62f3d342ebdb9b372fe58699b9.png接下来 modules 用来加载 so

memory 用来管理内存的

后面就是初始化系统调用的模拟实现

ea45084c1a96aebb1a8f00971120b10f.png

也就是源码中这一部分

3c08e98fea0b4c8dc772ca3666813dc8.png

后面是 hook 代码部分

eccdd9e6eaa32fea48187a3e4f969b65.png

根据 hooker 可以发现他对所有区段进行了 hook,这样效率是很低的!

255199f1aef8b222ecaff60fbe3f1cca.png

这一点在之前自己写 unicorn hook jni 的 hook 回调时候指定区段进行 hook 效率可以提升数倍!!如图

e44c38d7ef2dad78620f3a7cbac74bf8.png当然是要根据自己写的区域去指定, hook 段。

当然他写的hook jni 是

0a2d2b986c6809f65a7af6bf71d5cd58.png

用 4 行汇编代码,统一生成的,不同的汇编代码(自己在其中生产了个动态的 hexhook_id)。

我之前用的是

04758f1c07e1c18bb1f45693bea49bb3.png

b'\x00\xb5\x00\xbd'

也就是push {lr}

pop {pc}

然后就是 jni 的模拟实现部分

569ae89fb7f78af1c980bdcb40d6266d.png

da09c6d395ec5097b5a432209ce636d0.png

顺带一提,这 5 个函数是 JavaVM 的函数啦, 这个很眼熟吧

之前也用。unicorn 写过

dae77a3a8640be4828492103350fd089.png

很明现下面的 self.jni_env = JNIEnv(emu, class_loader, hooker) 是我们要找的看的地方, 跟进

1daaacf49f7753498c991510b17f58cb.png

这里有 230 多个 jni 函数(并不完整)每个函数都可以跟进进行查看。

提供的回调函数在实例化 Emu 对象后, 他还提供给我们了一些可用的回调函数。

aa1b40d9d91c58225602e8cc50f09800.png

位置在 samples/debug_utils 文件夹中,使用的时候可以直接对其修改即可, 举个栗子:

我们想要输出更详细的相应汇编代码,那么我们可以利用 capstone 来输出. 在 debug_utils.py 中修改代码

7f8fbd0ea3eb2c81e2bc609b1471a81b.png

然后在调用例子中,注释他自己的回调 hook_coode, 引入刚刚我们改版的

11e7717c0cb2499b6458138393c0c51e.png

这一来就可以输出更详细的汇编指令了

b33b47b7a8b268ca6d1a3171b699f9c5.png

当然,可以更具自己的需求进行调整修改.

demo example 分析

调用的是

48f9d306ddb6d728075c4c2027f969ff.png

465e89c809ecb2c3088a0b22888059e8.png

中的

7cc91c8dfc8243bca02a9f35c67d85a2.png

f840e32eed2107a077946a0c6993da8d.png

也就是取 "Hello from Native Library." 字符串的长度。、

操作流程也是:

061c62dcecb72aeb4fca2d2598816651.png

模拟器初始化与加载 so 文件

模拟调用函数(无参)

b053757c90d39147c27ae6ab1c9751ba.png

当然这个例子是无参数的, 我们正常情况下是需要带参数的。所以可以跟进函数 call_symbol 看看怎么传递参数

de100e55bbc42b98d14a06c2165f85fc.png

这里只是简单的判断了下,便传入了 call_native

该函数在这里

306e8bf41d6fb682bfda0875598bf734.png

先判断了是否是 jni 然后根据参数个数进行初始化,并写好 LR, 最后启动执行

拓展

2270b69c3bbd7d79fbe30402cff0322e.png

这里我们用添加 so 的放过解决了依赖库。

其实我们也可以用 hook 的方法来解决,就如图自写 unicorn 一样。hook 注后手动实现其功能即可。

而且 Emu 已经写了一些常用的了,位置在 androidemu-native-hooks.py

9f747d658cb857031d79ebfad76ee910.png

我们这里也参考他的写法,整一个 strlen 的来通过 hook 重写的方法来实现 demo 功能

609b4a0c8204dacce68e1cc86cb8c78a.png引入 emu 的工具类

引入 装饰器 native_method

参考 hooks.py 中的方式重写 strlen (当然如果函数作者已经写好了的话就直接用)

把这个 hook 给挂上

93b781f82e4667d1f1cd55ffc78aecde.png

运行结果没问题!当然还可以用这种方法替换掉任意目标函数

调用 Jni后面有空的好再更新这个帖子吧

因为我觉得 Emu 并不是一个很好的选择,我们只是学习一下他的原理就好。

大家如果有兴趣的话可以看看

ExAndroidNativeEmu 这个项目