分类目录归档:逆向工程

tweak项目ipa包重签名

1、参考链接:ipa包重签名
2、tweak项目修改部分是以插件的形式存在,因此需要将插件动态库与现在的ipa包重新打包签名;
3、找到tweak后生成的动态库,参考路径为:/Library/MobileSubstrate/DynamicLibarries/xxxTweak.dylib;
4、将该dylib文件放在现有包xx.app中,与二进文件同目录;
5、使用otool -L xxxxx查看Mach-O文件的动态库加载,这里面是没有tweak动态库的,需要将xxxTweak.dylib加进来;
6、工具来了,https://github.com/Tyilo/insert_dylib
6.1、使用release编译该git工程,得到一个inser_dylib工具,放在/usr/local/bin中;
6.2、insert_dylib @executable_path/xxxTweak.dylib xxxx

yusian@SianMac2:~$insert_dylib @executable_path/xxxTweak.dylib xxxx
LC_CODE_SIGNATURE load command found. Remove it? [y/n] y
Added LC_LOAD_DYLIB to lldb_patched

6.3、此时会生成一个xxxx_patched的Mach-O文件,使用otool -L xxxx查看能看到新加的动态库
7、修改xxxTweak.dylib中的库路径;
7.1、使用otool -L xxxTweak.dylib,可看到依赖的库有一个是与Cydia相关的
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
7.2、从越狱手机中将库拷贝出来存放到xxx.app目录中,与该动态库同目录;
7.3、修改动态库中CydiaSubstrate的路径

yusian@SianMac2:~$ install_name_tool xxxxtweak.dylib /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/CydiaSubstrate

8、将新加进来的两个动态库签名

yusian@SianMac2:~$ codesign -fs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxtweak.dylib
lldbtweak.dylib: replacing existing signature
yusian@SianMac2:~$ codesign -fs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CydiaSubstrate
CydiaSubstrate: replacing existing signature

9、整包重签名:ipa包重签名

yusian@SianMac2:~$ codesign -fs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --entitlements inh_entitlements.plist Payload/xxxx.app
Payload/lldb.app: replacing existing signature

10、两个环境变量说明:
10.1、@executable_path:可执行文件路径
10.2、@loader_path:当前加载库路径

ipa包重签名

1、准备.mobileprovision文件,需要与当前App匹配的,如App ID、Certificates、Devices、Enabled Services等;
2、导出entitlements.plist文件:

2.1、security cms -D -i embedded.mobileprovision > temp.plist;
2.2/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' temp.plist > entitlements.plist

3、使用codesign重签名
3.1、列出证书id列表

security find-identity -v -p codesigning
1) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "iPhone Developer: Yu Xi An (xxxxxxxxxx)"
2) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "iPhone Developer: Yu Xi An (xxxxxxxxxx)"
3) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "iPhone Distribution: Yu Xi An (xxxxxxxxxxx)"

3.2、签名

codesign -fs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --entitlements entitlements.plist xxxx.app

数字签名与非对称加密

1、对称加密
1.1、加密与解密用的是同一个密钥;
1.2、常见的加密方式有DES、3DES、AES等;
1.3、作用:加密

2、非对称加密
2.1、密钥成对出现,分别有公钥私钥
2.2、常见的非对称加密方式有RSA;
2.3、非对称加密使用公钥加密,私钥解密;
2.4、公钥公开发布给所有消息发送者,消息接收者保留私钥用于消息解密;
2.5、使用:加密

3、散列值
3.1、对消息(文件、数据)进行摘要计算;
3.2、每个消息有唯一的散列值,并且不可逆运算;
3.3、任何大小的消息进行散列计算得到的值长度是确定的;
3.4、常见的散列算法有MD4、MD5、SHA-1、SHA-2、SHA-3;
3.5、作用:确定数据唯一性,真实性、防篡改;

4、签名
4.1、涉及到非对称加密中的密钥,私钥与公钥;
4.2、私钥加密(签名),公钥解密(验证);
4.3、由于私钥不公开,因此一处签名,多处验证;
4.4、签名相当于非对称加密的反向操作;
4.5、签名一般与散列算法配合使用,加密散列值用于校验;
4.6、作用:确定数据的可信性,防抵赖;

5、证书
5.1、为防止消息窃听,需要加密,但加密需要事先传输密钥;
5.2、密钥传输安全性通过非对称加密来解决,非对称加密需要传输公钥;
5.3、公钥传输需要解决中间人攻击问题,确保公钥真实合法性,需要权威机构进行认证;
5.4、证书由权威机构颁发,证书中包含公钥的基本信息、公钥、权威机构签名;
5.5、作用:保证公钥合法性、真实性;

6、应用C–>S
6.0、操作系统或浏览器内置了权威机构的公钥,因此可以验证权威机构签发的证书;
6.1、C从S处获取证书,验证签名得到证书的散列值,将证书内容哈希计算,验证完整性,获取S的有效公钥;
6.2、C生成加密密钥,使用S的公钥加密发送给S,完成对称加密算法的密钥交换;
6.3、C与S有了一致的加密密钥,具备数据加密传输条件,数据可加密传输,本地解密。