ndk签名验证_NDK应用程序签名检查

小编典典

我将在这里回答您的第一个问题:

应用程序的签名存储在APK的DEX(Dalvik可执行文件)文件中。DEX文件具有以下结构:

标头

数据部分 (包含字符串,代码指令,字段等)

*方法标识符,类标识符等的*数组

因此,这是DEX文件头的开头:

DEX_FILE_MAGIC 常数 -ubyte [8]

*您的应用程序的*Adler-32校验和 (DEX_FILE_MAGIC和校验和本身除外)-uint

*应用程序的*SHA-1签名 (DEX_FILE_MAGIC,校验和和哈希本身除外)-ubyte [20]

因此,要确定apk的签名,您应该从偏移量32开始计算DEX文件的SHA-1签名。

要从本地代码访问apk的DEX文件,您可以读取过程内存,该内存存储在/ proc / self / maps中:

FILE *fp;

fp = fopen("/proc/self/maps", "r");

proc / $ ID / maps文件中的每一行都具有以下结构:

地址

权限

抵消

设备

索引节点

路径名

在这里,您可以找到对proc / $ ID / maps文件结构的更好描述:了解Linux / proc / id /

maps

要检测DEX文件在进程内存中的位置,您应该在proc / self / maps文件的每一行中检出“

pathname”列。当找到与DEX文件对应的行时,您应该获得DEX文件区域的开始和结束地址:

while (fgets(line, 2048, fp) != NULL) {

// search for '.dex'

if (strstr(line, ".dex") != NULL) {

// get starting and ending addresses of the DEX file region

因此,当您具有apk字节码的起始地址和结束地址时,便可以计算apk的签名。

2020-12-03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值