就是根据情况读取有 1 个、2 个、或者 3 个字节,做些操作,然后得到输出。
这个输出的意义是个数组长度。
这段是用 ida 静态分析一个 delphi 程序得到的 c 伪代码。。。
为啥存个数组长度要存成这样了???
还是说是某个算法,然后编译器优化成这样了?
还是说是我想多了,这玩意就是恶心人防破解的?
输入 0x3d,输出 0x7a
输入 0x70 0x01,输出 0xe0
输入 0x76 0xb8 0x21,输出 0x08 0x5c 0x6c
#include <stdio.h>
int main() {
unsigned long long i = 0;
unsigned long long out = 0;
// read 1 bit to i;
i = 0x76;
out = i;
if (i > 0x3f) {
// read 1 bit to i;
i = 0xb8;
out += (i - 1) << 6;
printf("%lld\n", (i - 1) << 6);
if (i > 0x7f) {
// read 1 bit to i;
i = 0x21;
out += (i - 1) << 13;
printf("%lld\n", (i - 1) << 13);
}
}
//output*2
printf("%lld %llx", out * 2, out * 2);
return 0;
}
下面是截图:
1
kokutou OP java 没有 unsigned,这样搞一下就好了:
``` private static int uByte(byte signedByte) { return ((int) signedByte) & 0xff; } ``` |