Renderdoc源码研究——修改其中签名并替换
程序员文章站
2022-03-14 20:29:32
...
源码思路
1、查找apk包中已经存在的签名文件,并移除该签名文件。
部分核心源码如下:
bool RemoveAPKSignature(const rdcstr &apk)
{
// Get the list of files in META-INF
rdcstr fileList = execCommand(aapt, "list \"" + apk + "\"").strStdout;
for(rdcstr &line : lines)
{
line.trim();
fileCount++;
if(line.beginsWith("META-INF"))
{
RDCDEBUG("Match found, removing %s", line.c_str());
execCommand(aapt, "remove \"" + apk + "\" " + line);
matchCount++;
}
}
RDCLOG("%d files searched, %d removed", fileCount, matchCount);
}
2、创建并生成RSA**,自签名证书
部分核心源码如下:
rdcstr GetAndroidDebugKey()
{
// locate keytool and use it to generate a keystore
rdcstr create;
create += " -genkey";
create += " -keystore \"" + key + "\"";
create += " -storepass android";
create += " -alias rdocandroidkey";
create += " -keypass android";
create += " -keyalg RSA";
create += " -keysize 2048";
create += " -validity 10000";
create += " -dname \"CN=, OU=, O=, L=, S=, C=\"";
}
3、用创建好的签名证书对apk进行签名。
bool DebugSignAPK(const rdcstr &apk, const rdcstr &workDir){
args += " sign ";
args += " --ks \"" + debugKey + "\" ";
args += " --ks-pass pass:android ";
args += " --key-pass pass:android ";
args += " --ks-key-alias rdocandroidkey ";
args += "\"" + apk + "\"";
}
4、查找apk中是否有生成的“META-INF”文件夹,来检查签名是否成功。
修改思路
1、在用户设置的 AndroidSDK 路径下的 platform-tools 子文件下,即\android_sdk\android_sdk\platform-tools
目录下创建KeyStore
文件夹,其中包含两个文件:
- 证书 xxx.keystore
- 存放密码文件 xxx.txt
如果程序可以检测上述两个文件的存在,那么直接使用该文件对apk进行签名。否则仍使用Renderdoc的自签名。
2、用我们自己的签名方法对apk进行签名,主要修改了DebugSignAPK
函数。
jarsigner
-keystore .keystore文件路径(签名文件地址配置)
-sigalg SHA1withRSA
-digestalg SHA1
-storepass 签名文件storepass(password.txt文件获取)
-keypass 签名文件keypass(password.txt文件获取)
-signedjar 签名后apk输出地址 待签名的未签名apk地址
签名文件的keyAliasName(password.txt文件获取)
使用方法
- 在
\android_sdk\android_sdk\platform-tools
目录下创建KeyStore
文件夹,并放入xxx.keystore 文件,以及存放密码的xxx.txt 文件。那么就可以用指定的证书文件对apk进行签名。 如果找不到该文件夹,用户未指定签名证书的话,则会直接使用Renderdoc的自签名。 - txt 内部存放格式:
// 分别对应-storepass 签名文件storepass、-keypass 签名文件keypass、签名文件的keyAliasName这三个参数。 KeystorePass: xxxxx KeyaliasName: xxxxx KeyaliasPass: xxxxx
上一篇: 单向加密--MD算法(消息摘要算法MD5和SHA)工具类
下一篇: dreamweaver是什么软件