siwtch混淆就是指利用switch指令将程序流程打乱(MSIL中的switch可以理解为C中的switch..case),然后利用一个int32常数变量,给该变量不同的值代表不同的执行顺序,最终保证原程序的正确执行。但这种混淆后的.net程序是无法反编译为高级语言的。
有没有熟悉这方面的朋友,谈谈反混淆有什么好的方法,或是好的算法。
示例代码如下:
L_0000: br.s L_004f
L_0002: ldloc num2//num2就是switch的循环变量
L_0006: switch (L_010e, L_0137, L_0165, L_0193, L_0089, ....//等等)
L_004f: nop
L_0050: ldc.i4 9//num2=9
L_0055: stloc num2
L_0059: br.s L_0002//跳回switch
L_005b: ldsfld bool io::g
L_0060: brtrue.s L_00d7
L_0062: ldc.i4 14//num2=14
L_0067: stloc num2
L_006b: br.s L_0002//跳回switch
这种混淆对流程的影响可以在IDA 的流程图中看出来:
- 标 题:对程序流程分析和优化熟悉的TX进来谈谈,如何对付switch做的混淆
- 作 者:tankaiha
- 时 间:2008-10-27 22:56
- 链 接:http://bbs.pediy.com/showthread.php?t=75503