根据以往的libmetasec_ml.so来看在此之前的入口位置都差不多,但是这一次的位置却有些变化了
不过还是跟踪到了,但是还是有些异常。
直接上代码吧
def get_sign(url, header_str):
g_vfs_path = "%s/vfs" % os.path.dirname(os.path.abspath(__file__))
emulator = Emulator(vfs_root=posixpath.join(posixpath.dirname(__file__), g_vfs_path), muti_task=True)
vfs_path = emulator.get_vfs_root()
libcm = emulator.load_library("%s/system/lib/libc.so" % vfs_path)
libml = emulator.load_library("%s/data/data/com.ss.android.ugc.aweme/libmetasec_ml.so" % vfs_path, do_init=False)
emulator.java_classloader.add_class(ms_bd_c_k)
emulator.java_classloader.add_class(ms_bd_c_a0)
emulator.java_classloader.add_class(MS)
emulator.java_classloader.add_class(java_lang_Thread)
emulator.call_symbol(libml, 'JNI_OnLoad', emulator.java_vm.address_ptr, 0x00)
url_addr = emulator.call_symbol(libcm, 'malloc', len(url) + 1)
header_str_addr = emulator.call_symbol(libcm, 'malloc', len(header_str) + 1)
memory_helpers.write_utf8(emulator.mu, url_addr, url)
memory_helpers.write_utf8(emulator.mu, header_str_addr, header_str)
result_addr = emulator.call_native(libml.base + 隐藏+ 1, url_addr, header_str_addr)
result = memory_helpers.read_utf8(emulator.mu, result_addr)
sign = result.replace('\n', '@@@@').replace('\r', '')
sign_list = sign.split('@@@@')
json_sign = {
sign_list[0]: sign_list[1],
sign_list[2]: sign_list[3],
sign_list[4]: sign_list[5],
sign_list[6]: sign_list[7],
sign_list[8]: sign_list[9],
sign_list[10]: sign_list[11],
}
return json_sign
结果是
这里我们的入参是头条的url和headers
经测头条极速版9.7.1和红果短剧 6.1.4.32以及dy28.9的hook位置大差不差 估计是新本版都用的是一套??(未知)
声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!