本帖最后由 fyc132 于 2018-5-16 18:45 编辑
应官网邀请
首先定位到UE4中的关键事件
通过把输入的验证码传给tmgs.maln来验证
,
Dll先解密一个lua的文件头,在验证函数中加载该lua,并调用其中的check函数
找到lua执行opcode的地方
然后对每个case进行还原
还原后的结果为
通过置换掉luadec中的opcode对应表,修复下
关键的lua代码,luadec解析的还是有些问题,不过不影响,看汇编岂不美哉
(var.print)((var.check)("E0EA72E0E1C1BFFBC26E8B47AD9D809C"))我们观察到了程序其实每次都有打印正确的KEY,不知道目的合在。下面去看汇编
check函数中先调用rc4(“CDD8AAAA500CA8EF8713E1C758175003”) 初始化rc4。来后调用prexor函数对输入的参数进行一轮异或
Prexor函数将字符串与[C++] 纯文本查看 复制代码 BYTE xor_array[] = { 183,115,128,100,10,204,81,15,29,88,67,119,44,104,202,7,156,164,85,119,3,157,208,191,253,101,2,172,248,131,105,50 }; 从1开始挨个进行循环异或,
prexor处理完后,把处理过后的数组进行rc4加密
然后与 [C++] 纯文本查看 复制代码 BYTE encry_data[] = { 196, 243, 228, 110, 198, 157, 94, 18, 69, 27, 52, 91, 68, 162, 205, 155, 56, 241, 34, 116, 158, 77, 111, 66, 152, 103, 174, 84, 123, 234, 91, 133 }; 进行比较
比较成功,就返回TRUE
所以 第一关为E0EA72E0E1C1BFFBC26E8B47AD9D809C |