Comments (8)
Show code
from androidnativeemu.
libcms's string is encrypted.The decrypt code called by linker,so you need call initarray first.
See my branch for more information.
from androidnativeemu.
#coding utf-8
import logging
import posixpath
import sys
from unicorn import UcError, UC_HOOK_CODE, UC_HOOK_MEM_UNMAPPED
from unicorn.arm_const import *
from androidemu.emulator import Emulator
from androidemu.java.java_class_def import JavaClassDef
from androidemu.java.java_method_def import java_method_def
Create java class.
from samples import debug_utils
class Testa(metaclass=JavaClassDef, jvm_name='com/ss/sys/secuni/b/c'):
def __init__(self):
pass
@java_method_def(name='n0', signature='(Landroid/content/Context;)[B', native=True)
def n0(self, mu, context):
pass
@java_method_def(name='n1', signature='(Landroid/content/Context;Ljava/lang/String;)I', native=True)
def n1(self, mu, context, str1):
pass
def test(self):
pass
class UserInfo(metaclass=JavaClassDef, jvm_name='com/ss/android/common/applog/UserInfo'):
def __init__(self):
pass
.method public static native a()Ljava/lang/String;
.end method
@java_method_def(name='a', signature='()Ljava/lang/String', native=True)
def a(self, mu):
pass
.method public static native getDescription()Ljava/lang/String;
.end method
@java_method_def(name='getDescription', signature='()Ljava/lang/String', native=True)
def getDescription(self, mu):
pass
.method public static native getFile()Ljava/lang/String;
.end method
@java_method_def(name='getFile', signature='()Ljava/lang/String', native=True)
def getFile(self, mu):
pass
.method public static native getFingerprint()Ljava/lang/String;
.end method
@java_method_def(name='getFingerprint', signature='()Ljava/lang/String', native=True)
def getFingerprint(self, mu):
pass
.method public static native getPackage(Ljava/lang/String;)V
.end method
@java_method_def(name='getPackage', signature='(Ljava/lang/String;)V', native=True)
def getPackage(self, mu, str1):
pass
.method public static native getS()Ljava/lang/String;
.end method
@java_method_def(name='getS', signature='()Ljava/lang/String', native=True)
def getS(self, mu):
pass
.method public static native getT()[B
.end method
@java_method_def(name='getT', signature='()Ljava/lang/String', native=True)
def getT(self, mu):
pass
.method public static native getTemperature()I
.end method
@java_method_def(name='getTemperature', signature='()I', native=True)
def getTemperature(self, mu):
pass
.method public static native getType()I
.end method
@java_method_def(name='getType', signature='()I', native=True)
def getType(self, mu):
pass
.method public static native getUserInfo(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
.end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str1, strArr):
pass
.method public static native getUserInfo(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
.end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str1, strArr, str2):
pass
.method public static native getUserInfo(I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
.end method
@java_method_def(name='getUserInfo', signature='(I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, strArr1, strArr2, str):
pass
.method public static native getUserInfoSkipGet(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
.end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str, strArr):
pass
.method public static native initUser(Ljava/lang/String;)I
.end method
@java_method_def(name='initUser', signature='(Ljava/lang/String;)I', native=True)
def initUser(self, mu):
pass
.method public static native isR()I
.end method
@java_method_def(name='isR', signature='()I', native=True)
def isR(self, mu):
pass
@java_method_def(name='a', signature='(I)V', native=True)
def a(self, mu, appId=2):
pass
@java_method_def(name='setAppId', signature='(I)V', native=True)
def setAppId(self, mu, appId=2):
pass
def test(self):
pass
class MainActivity(metaclass=JavaClassDef, jvm_name='com/ss/sys/ces/a'):
def __init__(self):
pass
@java_method_def(name='d', signature='([B)[B', native=True)
def d(self, mu, byte1, byte2):
pass
@java_method_def(name='leviathan', signature='(I[B)[B', native=True)
def leviathan(self, mu, byte1, byte2):
pass
@java_method_def(name='e', signature='([B)[B', native=True)
def e(self, mu, byte1, byte2):
pass
@java_method_def(name='rb', signature='(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)[B', native=True)
def rb(self, mu, context, str1, str2):
pass
@java_method_def(name='jns', signature='(ILjava/lang/String;)V', native=True)
def jns(self, mu, i, str):
pass
@java_method_def(name='jni', signature='(II)V', native=True)
def jni(self, mu, i, i2):
pass
@java_method_def(name='ws', signature='(I)V', native=True)
def ws(self, mu, i, str):
pass
Configure logging
logging.basicConfig(
stream=sys.stdout,
level=logging.DEBUG,
format="%(asctime)s %(levelname)7s %(name)34s | %(message)s"
)
logger = logging.getLogger(name)
Initialize emulator
emulator = Emulator(
vfp_inst_set=True,
vfs_root=posixpath.join(posixpath.dirname(file), "vfs")
)
Register Java class.
emulator.java_classloader.add_class(MainActivity)
emulator.java_classloader.add_class(Testa)
emulator.java_classloader.add_class(UserInfo)
Load all libraries.
emulator.load_library("example_binaries/libdl.so")
emulator.load_library("example_binaries/libc.so")
emulator.load_library("example_binaries/libstdc++.so")
emulator.load_library("example_binaries/libm.so")
lib_module = emulator.load_library("douyin/libcms.so")
Show loaded modules.
logger.info("Loaded modules:")
for module in emulator.modules:
logger.info("=> 0x%08x - %s" % (module.base, module.filename))
Debug
emulator.mu.hook_add(UC_HOOK_CODE, debug_utils.hook_code)
emulator.mu.hook_add(UC_HOOK_MEM_UNMAPPED, debug_utils.hook_unmapped)
emulator.mu.hook_add(UC_HOOK_MEM_WRITE, debug_utils.hook_mem_write)
emulator.mu.hook_add(UC_HOOK_MEM_READ, debug_utils.hook_mem_read)
try:
# Run JNI_OnLoad.
# JNI_OnLoad will call 'RegisterNatives'.
emulator.call_symbol(lib_module, 'JNI_OnLoad', emulator.java_vm.address_ptr, 0x00)
emulator.mu.hook_add(UC_HOOK_MEM_UNMAPPED, debug_utils.hook_unmapped)
# Do native stuff.
emulator.mu.hook_add(UC_HOOK_CODE, debug_utils.hook_code)
userInfo = UserInfo()
userInfo.setAppId(emulator)
logger.info("Response from JNI call: %s" % "success")
# Dump natives found.
logger.info("Exited EMU.")
logger.info("Native methods registered to MainActivity:")
for method in bc.jvm_methods.values():
if method.native:
logger.info("- [0x%08x] %s - %s" % (method.native_addr, method.name, method.signature))
except UcError as e:
print("Exit at %x" % emulator.mu.reg_read(UC_ARM_REG_PC))
raise
from androidnativeemu.
douyin libcms
from androidnativeemu.
#coding utf-8
import logging
import posixpath
import sys
from unicorn import UcError, UC_HOOK_CODE, UC_HOOK_MEM_UNMAPPED
from unicorn.arm_const import *
from androidemu.emulator import Emulator
from androidemu.java.java_class_def import JavaClassDef
from androidemu.java.java_method_def import java_method_def
# Create java class.
from samples import debug_utils
class Testa(metaclass=JavaClassDef, jvm_name='com/ss/sys/secuni/b/c'):
def __init__(self):
pass
@java_method_def(name='n0', signature='(Landroid/content/Context;)[B', native=True)
def n0(self, mu, context):
pass
@java_method_def(name='n1', signature='(Landroid/content/Context;Ljava/lang/String;)I', native=True)
def n1(self, mu, context, str1):
pass
def test(self):
pass
class UserInfo(metaclass=JavaClassDef, jvm_name='com/ss/android/common/applog/UserInfo'):
def __init__(self):
pass
# .method public static native a()Ljava/lang/String;
# .end method
@java_method_def(name='a', signature='()Ljava/lang/String', native=True)
def a(self, mu):
pass
# .method public static native getDescription()Ljava/lang/String;
# .end method
@java_method_def(name='getDescription', signature='()Ljava/lang/String', native=True)
def getDescription(self, mu):
pass
# .method public static native getFile()Ljava/lang/String;
# .end method
@java_method_def(name='getFile', signature='()Ljava/lang/String', native=True)
def getFile(self, mu):
pass
# .method public static native getFingerprint()Ljava/lang/String;
# .end method
@java_method_def(name='getFingerprint', signature='()Ljava/lang/String', native=True)
def getFingerprint(self, mu):
pass
# .method public static native getPackage(Ljava/lang/String;)V
# .end method
@java_method_def(name='getPackage', signature='(Ljava/lang/String;)V', native=True)
def getPackage(self, mu, str1):
pass
# .method public static native getS()Ljava/lang/String;
# .end method
@java_method_def(name='getS', signature='()Ljava/lang/String', native=True)
def getS(self, mu):
pass
# .method public static native getT()[B
# .end method
@java_method_def(name='getT', signature='()Ljava/lang/String', native=True)
def getT(self, mu):
pass
# .method public static native getTemperature()I
# .end method
@java_method_def(name='getTemperature', signature='()I', native=True)
def getTemperature(self, mu):
pass
# .method public static native getType()I
# .end method
@java_method_def(name='getType', signature='()I', native=True)
def getType(self, mu):
pass
# .method public static native getUserInfo(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
# .end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str1, strArr):
pass
# .method public static native getUserInfo(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
# .end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str1, strArr, str2):
pass
# .method public static native getUserInfo(I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
# .end method
@java_method_def(name='getUserInfo', signature='(I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, strArr1, strArr2, str):
pass
# .method public static native getUserInfoSkipGet(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
# .end method
@java_method_def(name='getUserInfo', signature='(ILjava/lang/String;[Ljava/lang/String;)Ljava/lang/String', native=True)
def getUserInfo(self, mu, i, str, strArr):
pass
# .method public static native initUser(Ljava/lang/String;)I
# .end method
@java_method_def(name='initUser', signature='(Ljava/lang/String;)I', native=True)
def initUser(self, mu):
pass
# .method public static native isR()I
# .end method
@java_method_def(name='isR', signature='()I', native=True)
def isR(self, mu):
pass
@java_method_def(name='a', signature='(I)V', native=True)
def a(self, mu, appId=2):
pass
@java_method_def(name='setAppId', signature='(I)V', native=True)
def setAppId(self, mu, appId=2):
pass
def test(self):
pass
class MainActivity(metaclass=JavaClassDef, jvm_name='com/ss/sys/ces/a'):
def __init__(self):
pass
@java_method_def(name='d', signature='([B)[B', native=True)
def d(self, mu, byte1, byte2):
pass
@java_method_def(name='leviathan', signature='(I[B)[B', native=True)
def leviathan(self, mu, byte1, byte2):
pass
@java_method_def(name='e', signature='([B)[B', native=True)
def e(self, mu, byte1, byte2):
pass
@java_method_def(name='rb', signature='(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)[B', native=True)
def rb(self, mu, context, str1, str2):
pass
@java_method_def(name='jns', signature='(ILjava/lang/String;)V', native=True)
def jns(self, mu, i, str):
pass
@java_method_def(name='jni', signature='(II)V', native=True)
def jni(self, mu, i, i2):
pass
@java_method_def(name='ws', signature='(I)V', native=True)
def ws(self, mu, i, str):
pass
# Configure logging
logging.basicConfig(
stream=sys.stdout,
level=logging.DEBUG,
format="%(asctime)s %(levelname)7s %(name)34s | %(message)s"
)
logger = logging.getLogger(__name__)
# Initialize emulator
emulator = Emulator(
vfp_inst_set=True,
vfs_root=posixpath.join(posixpath.dirname(__file__), "vfs")
)
# Register Java class.
emulator.java_classloader.add_class(MainActivity)
emulator.java_classloader.add_class(Testa)
emulator.java_classloader.add_class(UserInfo)
# Load all libraries.
emulator.load_library("example_binaries/libdl.so")
emulator.load_library("example_binaries/libc.so")
emulator.load_library("example_binaries/libstdc++.so")
emulator.load_library("example_binaries/libm.so")
lib_module = emulator.load_library("douyin/libcms.so")
# Show loaded modules.
logger.info("Loaded modules:")
for module in emulator.modules:
logger.info("=> 0x%08x - %s" % (module.base, module.filename))
# Debug
# emulator.mu.hook_add(UC_HOOK_CODE, debug_utils.hook_code)
# emulator.mu.hook_add(UC_HOOK_MEM_UNMAPPED, debug_utils.hook_unmapped)
# emulator.mu.hook_add(UC_HOOK_MEM_WRITE, debug_utils.hook_mem_write)
# emulator.mu.hook_add(UC_HOOK_MEM_READ, debug_utils.hook_mem_read)
try:
# Run JNI_OnLoad.
# JNI_OnLoad will call 'RegisterNatives'.
emulator.call_symbol(lib_module, 'JNI_OnLoad', emulator.java_vm.address_ptr, 0x00)
emulator.mu.hook_add(UC_HOOK_MEM_UNMAPPED, debug_utils.hook_unmapped)
# Do native stuff.
emulator.mu.hook_add(UC_HOOK_CODE, debug_utils.hook_code)
userInfo = UserInfo()
userInfo.setAppId(emulator)
logger.info("Response from JNI call: %s" % "success")
# Dump natives found.
logger.info("Exited EMU.")
logger.info("Native methods registered to MainActivity:")
for method in bc.jvm_methods.values():
if method.native:
logger.info("- [0x%08x] %s - %s" % (method.native_addr, method.name, method.signature))
except UcError as e:
print("Exit at %x" % emulator.mu.reg_read(UC_ARM_REG_PC))
raise
from androidnativeemu.
添加libcms
from androidnativeemu.
code paste show error
from androidnativeemu.
大神,可以加个qq号吗
from androidnativeemu.
Related Issues (20)
- didn't get any response from douyin levithan function HOT 3
- Do you know how to deal with the return value in the parameter? HOT 3
- Bug with Java ClassFieldDef translated to class 'type' HOT 4
- NotImplementedError: Symbol hook not implemented pthread_create
- Can you help me solve a problem,i can pay.
- Probably find a way to implement JNI methods with unknown args length
- Need help with calling JNIEnv not JavaVM
- so方法种调用java层的参数提示:Could not find field,请问如何定义这个调用参数? HOT 1
- The launch of aarch64 HOT 2
- 关于寻找字段和内部类的处理?
- Error in get_object_array_element HOT 1
- The return value of the emulator.call_symbol function is NONE, and the incoming parameters have no output in the console
- malloc bug Invalid instruction (UC_ERR_INSN_INVALID)
- 请问context参数应该怎么导入?
- AttributeError: 'Emulator' object has no attribute 'uc' HOT 2
- Add Example for native function with context parameter
- Please update package in pypi
- Cannot relocate large libraries HOT 1
- unicorn.unicorn.UcError: Invalid instruction (UC_ERR_INSN_INVALID)
- get_superclass 有一个错误,会导致register_natives 中获取的clazz_id不正确
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from androidnativeemu.