论代码保护之困:套壳与反编译的无解之战(app打包封装)
论"套壳"之术
近来总见街市上飘着些新词儿,"打包"、"封装"之类的话头叫得震天响。这倒教我想起幼时在绍兴见过的酱园伙计——将霉干菜层层叠叠压进陶瓮里﹐最后拿黄泥封口﹐待到来年开封时﹐竟连当初亲手装坛的老掌柜也辨不出咸淡了。
尝闻后生们议论:"代码不过百十行﹐何须大费周章?"余每闻此言﹐必掩面长叹。
今日方知此辈犹不知晓‚这世上的腌臜事多着呢!
一丶所谓开发者的铁屋子
且看那Android Studio的暗室里﹐年轻后生们正忙着将心血熬成的代码倒进ProGuard这口大染缸。build.gradle
文件里密密麻麻的规则好似衙门告示﹐这边禁了反射﹐那边锁了调试。
- -keep class com.example.** { *; }
- -dontoptimize
- -dontpreverify
这般严防死守﹐倒像极了旧时裹脚的老妇人——分明是自己写的物事﹐偏要缠得密不透风。可曾想过那APK文件里藏着的私货?又怎知dex文件转换时暗埋的祸根?
二丶签名的玄机与困局
签名算法对比表
MD5 SHA256
碰撞概率 "阿Q式自信" "祥林嫂的絮叨"
兼容性 仿佛孔乙己的长衫般陈旧而固执
那一纸数字证书最是蹊跷﹕七日内便要续签的调试密钥﹐三十年不换的生产证书。"包名如人名﹐总要起个响亮字号。"这般说辞下掩着多少偷梁换柱的勾当?某日若见应用市场上两个一模一样的APK打架﹐怕是要重演"狂人日记"里的吃人惨剧了。
三丶壳中窥世的悲哀与觉醒
public class MainActivity extends Activity {
// 此处应有加密逻辑
// 然终究不过是纸糊的铠甲
}
加固厂商们兜售着形形色色的护甲﹕有的自称能抗逆向如金钟罩铁布衫﹐有的夸口防篡改堪比铜墙铁壁。殊不知那反编译工具早已进化成削铁如泥的激光剑!更可笑的是各家厂商自家加壳工具打出来的包﹐倒先互相认不得兄弟了。
今日加壳明日脱‚恰似那闰土手中的钢叉刺猹——扎得进皮肉‚扎不透命运。
注:此图非实指‚聊表意象耳。
回目录↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑←←←←←←←←←←←←←←→→→→→→→→→→→→→↗↗↗↗↗↗↗↘↙↙↙↙↙↙↙↙▼▼▼▼▼▲▲▲▲▲◆◆◇◇♣♣♦♦♥♥♠♠★★☆☆※※〓§¶†‡∞×÷±≈≠≡≤≥‰¥€£¢¤©®™°′″‴μΩΩαβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ∂∇∏∑√∫≈≠≡≤≥…¢£¥€§‰™®©°²³·•·‧¡¿¬∧∨⊕⊗⊥⌈⌉⌊⌋⟨⟩◊◦♠♣♥♦★☆♀♂♪♫☼►◄▬▲►▼◄○●■□◆◇�△▽◎⊙※∴∵§ ̄―――'"`~∥|…‥‘’“”〝〞'"`~¥₩$¢£€¤฿₩₪₫₭₮₯₹₱₲₳₴₵₶₷₸₹₺₻ufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffd⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⓿�⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⑴⑵⑶⑷⑸⑹⑺�..." title="此处文字已被混淆处理">混淆后的字符串示例(鼠标悬停查看)...
这层层包裹下还剩几分真意?或许正如九斤老太常念叨的那句话:一代不如一代!当真是代码越写越长‚本心越缩越小。
结语:救救应用......
开发者自省录:
- ☑ 可曾认真校验过第三方库?
- ☑ 是否将密钥硬编码当作勋章炫耀?
- ☑ 对着加固报告是否像孔乙己数茴香豆般自欺?
近来总见街市上飘着些新词儿,"打包"、"封装"之类的话头叫得震天响。这倒教我想起幼时在绍兴见过的酱园伙计——将霉干菜层层叠叠压进陶瓮里﹐最后拿黄泥封口﹐待到来年开封时﹐竟连当初亲手装坛的老掌柜也辨不出咸淡了。
尝闻后生们议论:"代码不过百十行﹐何须大费周章?"余每闻此言﹐必掩面长叹。
今日方知此辈犹不知晓‚这世上的腌臜事多着呢!
一丶所谓开发者的铁屋子
且看那Android Studio的暗室里﹐年轻后生们正忙着将心血熬成的代码倒进ProGuard这口大染缸。build.gradle
文件里密密麻麻的规则好似衙门告示﹐这边禁了反射﹐那边锁了调试。
- -keep class com.example.** { *; }
- -dontoptimize
- -dontpreverify
这般严防死守﹐倒像极了旧时裹脚的老妇人——分明是自己写的物事﹐偏要缠得密不透风。可曾想过那APK文件里藏着的私货?又怎知dex文件转换时暗埋的祸根?
二丶签名的玄机与困局
签名算法对比表 | ||
---|---|---|
MD5 | SHA256 | |
碰撞概率 | "阿Q式自信" | "祥林嫂的絮叨" |
兼容性 | 仿佛孔乙己的长衫般陈旧而固执 |
那一纸数字证书最是蹊跷﹕七日内便要续签的调试密钥﹐三十年不换的生产证书。"包名如人名﹐总要起个响亮字号。"这般说辞下掩着多少偷梁换柱的勾当?某日若见应用市场上两个一模一样的APK打架﹐怕是要重演"狂人日记"里的吃人惨剧了。
三丶壳中窥世的悲哀与觉醒
public class MainActivity extends Activity {
// 此处应有加密逻辑
// 然终究不过是纸糊的铠甲
}
加固厂商们兜售着形形色色的护甲﹕有的自称能抗逆向如金钟罩铁布衫﹐有的夸口防篡改堪比铜墙铁壁。殊不知那反编译工具早已进化成削铁如泥的激光剑!更可笑的是各家厂商自家加壳工具打出来的包﹐倒先互相认不得兄弟了。
今日加壳明日脱‚恰似那闰土手中的钢叉刺猹——扎得进皮肉‚扎不透命运。

注:此图非实指‚聊表意象耳。
回目录↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑←←←←←←←←←←←←←←→→→→→→→→→→→→→↗↗↗↗↗↗↗↘↙↙↙↙↙↙↙↙▼▼▼▼▼▲▲▲▲▲◆◆◇◇♣♣♦♦♥♥♠♠★★☆☆※※〓§¶†‡∞×÷±≈≠≡≤≥‰¥€£¢¤©®™°′″‴μΩΩαβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ∂∇∏∑√∫≈≠≡≤≥…¢£¥€§‰™®©°²³·•·‧¡¿¬∧∨⊕⊗⊥⌈⌉⌊⌋⟨⟩◊◦♠♣♥♦★☆♀♂♪♫☼►◄▬▲►▼◄○●■□◆◇�△▽◎⊙※∴∵§ ̄―――'"`~∥|…‥‘’“”〝〞'"`~¥₩$¢£€¤฿₩₪₫₭₮₯₹₱₲₳₴₵₶₷₸₹₺₻ufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffd⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⓿�⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⑴⑵⑶⑷⑸⑹⑺�..." title="此处文字已被混淆处理">混淆后的字符串示例(鼠标悬停查看)...
这层层包裹下还剩几分真意?或许正如九斤老太常念叨的那句话:一代不如一代!当真是代码越写越长‚本心越缩越小。
结语:救救应用......
开发者自省录:
- ☑ 可曾认真校验过第三方库?
- ☑ 是否将密钥硬编码当作勋章炫耀?
- ☑ 对着加固报告是否像孔乙己数茴香豆般自欺?