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

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

2019-9-29 11:44
18858

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等等这些开源大神, 是这些人的分享精神推进了整个圈子的技术迭代;

 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-9-29 11:44 被StriveMario编辑 ,原因:
收藏
免费 14
支持
分享
打赏 + 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
活跃值: (407)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
大佬,逆向的事情就拜托了。
2019-9-29 11:54
0
雪    币: 1640
活跃值: (1719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
围观大佬
2019-9-29 11:54
0
雪    币: 268
活跃值: (3238)
能力值: ( 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
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
7
大佬666!点赞、收藏、留言,一波三连走起
2019-9-29 12:37
0
雪    币: 3508
活跃值: (4634)
能力值: ( LV13,RANK:437 )
在线值:
发帖
回帖
粉丝
8
666
2019-9-29 12:48
0
雪    币: 688
活跃值: (3630)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
9
2019-9-29 12:59
0
雪    币: 6573
活跃值: (3893)
能力值: (RANK:200 )
在线值:
发帖
回帖
粉丝
10
漂亮,结合例子展示了unicron的强大
2019-9-29 14:13
0
雪    币: 94
活跃值: (2397)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
学习学习!
2019-9-29 14:35
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
2019-9-29 15:16
0
雪    币: 29
活跃值: (295)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2019-9-29 15:26
0
雪    币: 14865
活跃值: (6088)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习
2019-9-29 16:02
0
雪    币: 3725
活跃值: (619)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
DeeLMind 围观大佬
围观大佬的好基友
2019-9-29 17:40
0
雪    币: 3712
活跃值: (1401)
能力值: ( 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
雪    币: 201
活跃值: (145)
能力值: ( 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
雪    币: 268
活跃值: (3238)
能力值: ( 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
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我卡在回调这里了
2019-9-30 23:47
0
雪    币: 2466
活跃值: (4561)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
keystone就是个坑,直接用官方的二进制安装软件比较好
2019-10-3 09:23
1
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
学习
2019-10-7 11:02
0
雪    币: 580
活跃值: (3039)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
Unable to find symbol 'JNI_OnLoad' in module

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