首页
社区
课程
招聘
17
[原创] 跨平台模拟执行 - AndroidNativeEmu食用手册
发表于: 2019-9-29 11:44 19406

[原创] 跨平台模拟执行 - AndroidNativeEmu食用手册

2019-9-29 11:44
19406

AndroidNativeEmu是基于Unicron实现的一个指令解析器, 让您能够跨平台模拟Android Native库函数,例如JNI_OnLoad,Java_XXX_XX等函数

项目地址

环境要求: python 3.7 (注意必须是3.7版本, 我使用3.6装keystone的时候踩了坑)

自测系统环境: win7

1.Clone 该项目

2.安装需要的支持模块

安装keystone-engine可能会失败(反正我是没装上)

解决方案:

3.把androidemu文件夹复制至sample文件夹下,并删除example.py文件下的关于"samples/"的目录访问路径

4.运行例子

5.不出意外的话就可以看到结果了

screenShot.png

新建一个jni工程, demo的代码很简单, 就是一个加法

注释写的很详细, 具体看代码吧

这个错误是因为没有实现对应syscall导致的, 缺少什么函数, 自己写一个函数绑定一下, 返回给他需要的值就可以了, 比如getpid, 那么自己写的函数随便返回一个整形就可以了

在syscall_hooks.py文件里, 可以看到作者已经实现的函数

5.png

以下信息通过分析所得, 具体分析过程不是本文重点, 这里不赘述;

详情看注释, 写的很详细

执行结果:
QQ图片20190921161209.png

可以看见, 函数已经调用成功, 并且已经成功获取返回值和参数, 不过检测出风险环境了(因为我的vfs文件都是从虚拟机里拷贝出来的), 接下来就可以分析检测点了!~~

1.通过执行日志分析, 发现频繁访问了build.prop, maps等系统环境, 猜测可能是通过这些文件来判断的, 这里列出个别几个

2.通过反复测试, 修改对应文件中的关键信息, 最终成功躲过该风控模块的环境检测

如下:

QQ图片20190921162353.png

该项目是通过Unicron来实现的, Unicorn 是一款非常优秀的跨平台模拟执行框架, 通过上帝视角来调试和调用二进制代码, 几乎可以很清晰发现反调试和检测手段, 而Unicorn的应用绝不仅仅只是个虚拟机, 可以实现很多骚操作, 再次感谢QEMU, Unicron, AndroidNativeEmu等等这些开源大神, 是这些人的分享精神推进了整个圈子的技术迭代;

 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-9-29 11:44 被StriveMario编辑 ,原因:
收藏
免费 17
支持
分享
赞赏记录
参与人
雪币
留言
时间
一路南寻
为你点赞!
2025-3-20 05:27
東陽不列山
感谢你的贡献,论坛因你而更加精彩!
2025-3-14 05:05
心游尘世外
为你点赞!
2024-11-27 04:17
飘零丶
感谢你的贡献,论坛因你而更加精彩!
2024-6-30 01:20
LiDogEgg
为你点赞~
2023-6-16 16:44
PLEBFE
为你点赞~
2023-1-22 01:49
nanhai
为你点赞~
2022-9-29 15:29
xiaozhu头
为你点赞~
2021-1-20 16:06
风中小筑V
为你点赞~
2020-7-23 22:54
Misirluo
为你点赞~
2019-12-13 23:26
风间仁
为你点赞~
2019-9-30 18:31
不知世事
为你点赞~
2019-9-29 20:39
切丝怕怕
为你点赞~
2019-9-29 18:47
Isaac.Cai
为你点赞~
2019-9-29 15:36
黑的默
为你点赞~
2019-9-29 12:58
KevinsBobo
为你点赞~
2019-9-29 12:36
SevenSir
为你点赞~
2019-9-29 11:54
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
收起 
赞赏  Misirluo   +2.00 2019/12/13
最新回复 (34)
雪    币: 1927
活跃值: (49)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
围观大佬
2019-9-29 11:52
0
雪    币: 129
活跃值: (477)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
大佬,逆向的事情就拜托了。
2019-9-29 11:54
0
雪    币: 1196
活跃值: (2045)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
围观大佬
2019-9-29 11:54
0
雪    币: 243
活跃值: (3748)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
楼主帮看看什么原因,我也是刚刚克隆下跑例子的log
/samples/example.py
2019-09-29 12:09:24,012   DEBUG        androidemu.internal.modules | Loading module 'example_binaries/libc.so'.
2019-09-29 12:09:24,014   DEBUG         androidemu.internal.memory | => Mapping memory page 0xcbbcb000 - 0xcbc57000, size 0x0008c000, prot 5
2019-09-29 12:09:24,015   DEBUG         androidemu.internal.memory | => Mapping memory page 0xcbc58000 - 0xcbc66000, size 0x0000e000, prot 3
2019-09-29 12:09:24,020   ERROR        androidemu.internal.modules | => Undefined external symbol: dlerror
2019-09-29 12:09:24,020   ERROR        androidemu.internal.modules | => Undefined external symbol: dlclose
2019-09-29 12:09:24,020   ERROR        androidemu.internal.modules | => Undefined external symbol: android_get_application_target_sdk_version
2019-09-29 12:09:24,020   ERROR        androidemu.internal.modules | => Undefined external symbol: dl_unwind_find_exidx
2019-09-29 12:09:24,560   ERROR        androidemu.internal.modules | => Undefined external symbol: dlerror
2019-09-29 12:09:24,560   ERROR        androidemu.internal.modules | => Undefined external symbol: dlclose
2019-09-29 12:09:24,563   ERROR        androidemu.internal.modules | => Undefined external symbol: android_get_application_target_sdk_version
2019-09-29 12:09:24,563   ERROR        androidemu.internal.modules | => Undefined external symbol: dl_unwind_find_exidx
Traceback (most recent call last):
  File "/Users/kwing/PycharmProjects/AndroidNativeEmuwu/samples/example.py", line 20, in <module>
    emulator.load_library("example_binaries/libc.so")
  File "/Users/kwing/PycharmProjects/AndroidNativeEmuwu/androidemu/emulator.py", line 120, in load_library
    self.call_native(fun_ptr)
  File "/Users/kwing/PycharmProjects/AndroidNativeEmuwu/androidemu/emulator.py", line 147, in call_native
    self.mu.emu_start(addr, stop_pos - 1)
2019-09-29 12:09:24,834   DEBUG                androidemu.emulator | Calling Init for: example_binaries/libc.so 
  File "/Users/kwing/Library/Python/3.7/lib/python/site-packages/unicorn/unicorn.py", line 288, in emu_start
    raise UcError(status)
2019-9-29 12:01
0
雪    币: 6266
活跃值: (1276)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
大佬666
2019-9-29 12:08
0
雪    币: 23352
活跃值: (3482)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
7
大佬666!点赞、收藏、留言,一波三连走起
2019-9-29 12:37
0
雪    币: 4245
活跃值: (5374)
能力值: ( LV13,RANK:437 )
在线值:
发帖
回帖
粉丝
8
666
2019-9-29 12:48
0
雪    币: 700
活跃值: (3810)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
9
2019-9-29 12:59
0
雪    币: 6573
活跃值: (3983)
能力值: (RANK:200 )
在线值:
发帖
回帖
粉丝
10
漂亮,结合例子展示了unicron的强大
2019-9-29 14:13
0
雪    币: 94
活跃值: (2847)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
学习学习!
2019-9-29 14:35
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
2019-9-29 15:16
0
雪    币: 29
活跃值: (420)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2019-9-29 15:26
0
雪    币: 15574
活跃值: (6848)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习
2019-9-29 16:02
0
雪    币: 3726
活跃值: (689)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
DeeLMind 围观大佬
围观大佬的好基友
2019-9-29 17:40
0
雪    币: 3712
活跃值: (1631)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
16
大佬,自动化逆向机器人就拜托了
2019-9-29 17:49
0
雪    币: 302
活跃值: (825)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
gtict 楼主帮看看什么原因,我也是刚刚克隆下跑例子的log /samples/example.py 2019-09-29 12:09:24,012 DEBUG androidemu.in ...
项目中的少了这里
emulator.load_library("example_binaries/libc.so")改为emulator.load_library("example_binaries/libc.so", do_init=False),他的例子有说明的了
2019-9-30 14:11
0
雪    币: 398
活跃值: (286)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
androidemu.emulator这个库pip安装不了, Not Found for url: https://pypi.org/simple/androidemu/,有搞好的同学吗
2019-9-30 15:23
0
雪    币: 200
活跃值: (296)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看不懂系列 
2019-9-30 17:25
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我记得android studio自带的profile就可以啊,楼主这个是基于什么原理啊
2019-9-30 18:01
0
雪    币: 243
活跃值: (3748)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
21
天边之云 项目中的少了这里 emulator.load_library("example_binaries/libc.so")改为emulator.load_library("e ...
可以运行了,,谢啦,,现在还有原因androidemu.internal.modules | => Undefined external symbol: dlerror  怎么这一类的函数找不到
2019-9-30 18:24
0
雪    币: 144
活跃值: (508)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我卡在回调这里了
2019-9-30 23:47
0
雪    币: 2699
活跃值: (5006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
keystone就是个坑,直接用官方的二进制安装软件比较好
2019-10-3 09:23
1
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
学习
2019-10-7 11:02
0
雪    币: 1180
活跃值: (3932)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
Unable to find symbol 'JNI_OnLoad' in module

上传的附件:
2019-10-8 15:07
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册