论"套壳"之术

近来总见街市上飘着些新词儿,"打包"、"封装"之类的话头叫得震天响。这倒教我想起幼时在绍兴见过的酱园伙计——将霉干菜层层叠叠压进陶瓮里﹐最后拿黄泥封口﹐待到来年开封时﹐竟连当初亲手装坛的老掌柜也辨不出咸淡了。

尝闻后生们议论:"代码不过百十行﹐何须大费周章?"余每闻此言﹐必掩面长叹。
今日方知此辈犹不知晓‚这世上的腌臜事多着呢!

一丶所谓开发者的铁屋子

乱码图示

且看那Android Studio的暗室里﹐年轻后生们正忙着将心血熬成的代码倒进ProGuard这口大染缸。build.gradle文件里密密麻麻的规则好似衙门告示﹐这边禁了反射﹐那边锁了调试。

  • -keep class com.example.** { *; }
  • -dontoptimize
  • -dontpreverify

这般严防死守﹐倒像极了旧时裹脚的老妇人——分明是自己写的物事﹐偏要缠得密不透风。可曾想过那APK文件里藏着的私货?又怎知dex文件转换时暗埋的祸根?

二丶签名的玄机与困局

签名算法对比表
MD5SHA256
碰撞概率"阿Q式自信" "祥林嫂的絮叨"
兼容性 仿佛孔乙己的长衫般陈旧而固执

那一纸数字证书最是蹊跷﹕七日内便要续签的调试密钥﹐三十年不换的生产证书。"包名如人名﹐总要起个响亮字号。"这般说辞下掩着多少偷梁换柱的勾当?某日若见应用市场上两个一模一样的APK打架﹐怕是要重演"狂人日记"里的吃人惨剧了。

三丶壳中窥世的悲哀与觉醒

public class MainActivity extends Activity {
    // 此处应有加密逻辑
    // 然终究不过是纸糊的铠甲
}

加固厂商们兜售着形形色色的护甲﹕有的自称能抗逆向如金钟罩铁布衫﹐有的夸口防篡改堪比铜墙铁壁。殊不知那反编译工具早已进化成削铁如泥的激光剑!更可笑的是各家厂商自家加壳工具打出来的包﹐倒先互相认不得兄弟了。

今日加壳明日脱‚恰似那闰土手中的钢叉刺猹——扎得进皮肉‚扎不透命运。
锁链与代码图

注:此图非实指‚聊表意象耳。

回目录↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑←←←←←←←←←←←←←←→→→→→→→→→→→→→↗↗↗↗↗↗↗↘↙↙↙↙↙↙↙↙▼▼▼▼▼▲▲▲▲▲◆◆◇◇♣♣♦♦♥♥♠♠★★☆☆※※〓§¶†‡∞×÷±≈≠≡≤≥‰¥€£¢¤©®™°′″‴μΩΩαβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ∂∇∏∑√∫≈≠≡≤≥…¢£¥€§‰™®©°²³·•·‧¡¿¬∧∨⊕⊗⊥⌈⌉⌊⌋⟨⟩◊◦♠♣♥♦★☆♀♂♪♫☼►◄▬▲►▼◄○●■□◆◇�△▽◎⊙※∴∵§ ̄―――'"`~∥|…‥‘’“”〝〞'"`~¥₩$¢£€¤฿₩₪₫₭₮₯₹₱₲₳₴₵₶₷₸₹₺₻ufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffdufffd⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⓿�⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⑴⑵⑶⑷⑸⑹⑺�..." title="此处文字已被混淆处理">混淆后的字符串示例(鼠标悬停查看)...

这层层包裹下还剩几分真意?或许正如九斤老太常念叨的那句话:一代不如一代!当真是代码越写越长‚本心越缩越小。

结语:救救应用......

开发者自省录: