请选择 进入手机版 | 继续访问电脑版
游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:9:00-16:30

    客服微信

    318989567

    电子邮件

    admin@chnbeer.com
  • 汽泡菌APP

    发现更多好精酿

  • 扫描二维码

    关注汽泡菌APP公众号

推荐阅读
书剑酿造所 LV.1
未知星球 | 未知职业
  • 关注0
  • 粉丝0
  • 帖子10
精选帖子
开启左侧

010Editorv9.0.2注册分析

[复制链接]
【精酿爱好者群】加微信拉你进群 318989567

马上注册,进入精酿啤酒的世界。APP下载请搜索:汽泡菌

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

010 Editor是一款功能强大的二进制编辑工具,记录一下对各个版本的破解过程

准备


  • 系统:Windows 7 SP1 x64 ultimate

  • 软件:010Editor v9.0.2

  • 工具:吾爱破解专用版OllyDbg

分析


注册破解



通过注册窗口,获取注册失败信息。

OD载入,搜索字符串,找到失败提示,确定调用位置。

01758646   > \68 209CCE02   push 010Edito.02CE9C20                   ; Invalid name or password. Please enter your name and password exactly as given when you purchased 010 Editor (make sure no quotes are included).0175864B   . FF15 4CDD8303 call dword ptr ds:[<&Qt5Core.QString::QS>; Qt5Core.QString::QString                                                                                                                                                                                                                                                                                            01758651   . 8D45 E0       lea eax,dword ptr ss:[ebp-0x20]01758654   . C645 FC 1A   mov byte ptr ss:[ebp-0x4],0x1A01758658   . 50           push eax                                 ; kernel32.BaseThreadInitThunk01758659   . E8 DC9A5FFF   call 010Edito.00D5213A0175865E   .^ E9 BEFDFFFF   jmp 010Edito.01758421

向上即可发现注册成功信息,和相应的跳转指令。

01758450   > \81FF DB000000 cmp edi,0xDB01758456   . 0F85 2C010000 jnz 010Edito.01758588                    ; 注册失败提示跳转....017584E3   . 85C0         test eax,eax                             ; kernel32.BaseThreadInitThunk017584E5   . 79 0E         jns short 010Edito.017584F5              ; 许可证未过期跳转017584E7   . 68 4C99CE02   push 010Edito.02CE994C                   ;   (EXPIRED)017584EC   . 8D4D E4       lea ecx,dword ptr ss:[ebp-0x1C]

继续向上便发现许可证验证函数。

01758335   . 8B0D C4BA8303 mov ecx,dword ptr ds:[0x383BAC4]0175833B   . 8BD8         mov ebx,eax                              ; kernel32.BaseThreadInitThunk0175833D   . 68 96450000   push 0x459601758342   . 6A 0A         push 0xA01758344   . E8 E81960FF   call 010Edito.00D59D31                   ; 许可证验证函数01758349   . 8B0D C4BA8303 mov ecx,dword ptr ds:[0x383BAC4]0175834F   . 8BF8         mov edi,eax                              ; kernel32.BaseThreadInitThunk01758351   . 81FB E7000000 cmp ebx,0xE701758357   . 0F84 F3000000 je 010Edito.01758450                     ; 注册提示跳转

所以可以确定当前所处的函数就是注册窗口的许可证检测函数。

进入0x01758344处的许可证验证函数。

经过分析,可确定许可证校验函数和校验成功跳转。

01D467E6 |> \57           push edi                                 ; Qt5Widge.QLineEdit::text01D467E7 |. FF75 0C       push [arg.2]                             ; 010Edito.0200155001D467EA |. 8B7D 08       mov edi,[arg.1]01D467ED |. 57           push edi                                 ; Qt5Widge.QLineEdit::text01D467EE |. E8 324101FF   call 010Edito.00D5A925                   ; 许可证校验函数01D467F3 |. 83F8 2D       cmp eax,0x2D                             ; Switch (cases 2D..E7)01D467F6 |. 0F84 A3000000 je 010Edito.01D4689F                     ; 校验成功跳转

在0x01D467EE处的校验函数中,可以发现许可证类型判断函数。

01D45F1A   . 8D45 DC       lea eax,dword ptr ss:[ebp-0x24]01D45F1D   . 8BCF         mov ecx,edi01D45F1F   . 50           push eax01D45F20   . E8 D13C01FF   call 010Edito.00D59BF6                   ; 许可证类型判断函数01D45F25   . BE 0CED8203   mov esi,010Edito.0382ED0C

以及单许可证类型的标志设置位置。

01D45FC8   > \80FB FC       cmp bl,0xFC01D45FCB   . 75 1F         jnz short 010Edito.01D45FEC01D45FCD   . C747 1C FF000>mov dword ptr ds:[edi+0x1C],0xFF         ; Case FC of switch 01D45F5301D45FD4   . BE FF000000   mov esi,0xFF01D45FD9   . C747 20 01000>mov dword ptr ds:[edi+0x20],0x1          ; 许可证类型设置为单许可证01D45FE0   . C747 30 01000>mov dword ptr ds:[edi+0x30],0x101D45FE7   . E9 8F000000   jmp 010Edito.01D4607B

经过测试,发现另一处验证位置,该位置用于判断是否验证许可证。

022067D6   . 837E 2C 00   cmp dword ptr ds:[esi+0x2C],0x0022067DA   . 74 0A         je short 010Edito.022067E6022067DC   . B8 13010000   mov eax,0x113022067E1   . 5E           pop esi                                  ; 010Edito.01C18349022067E2   . 5D           pop ebp                                  ; 010Edito.01C18349022067E3   . C2 0800       retn 0x8

如果已经注册过,则无需再次执行许可证验证流程,否则,执行许可证验证流程。

通过内存追踪,发现标志修改位置。

02208A46 |. 84C0         test al,al02208A48 |. 74 20         je short 010Edito.02208A6A02208A4A |. FF37         push dword ptr ds:[edi]02208A4C |. E8 342D01FF   call 010Edito.0121B785                   ; 验证许可证校验值02208A51 |. 83C4 04       add esp,0x402208A54 |. 8907         mov dword ptr ds:[edi],eax               ; 设置许可证验证标志02208A56 |. B0 01         mov al,0x1

其值来源于:

02205268 |. 5E           pop esi                                  ; 0018FB8802205269 |. 0F44C1       cmove eax,ecx                            ; 计算后的值用于返回0220526C |. 5D           pop ebp                                  ; 0018FB880220526D \. C3           retn

最后,可以确定的需要修改的位置有:

01D467F6 |. 0F84 A3000000 je 010Edito.01D4689F                     ; 校验成功跳转01D45FCB   . /75 1F         jnz short 010Edito.01D45FEC              ; 单许可证设置跳转017584E5   . 79 0E         jns short 010Edito.017584F5              ; 许可证未过期跳转02205269 |. 0F44C1       cmove eax,ecx                            ; 计算后的值用于返回

分别修改为:

01D467F6     /E9 A4000000   jmp 010Edito.01D4689F                    ; 校验成功跳转01D45FCB      90            nop                                      ; 单许可证设置跳转017584E5     /EB 0E         jmp short 010Edito.017584F5              ; 许可证未过期跳转02205269      90            nop                                      ; 计算后的值用于返回

输入任意注册码后,注册成功。

算法分析



注册算法的大致流程如下:

  1. 判断Name和Password是否为空。

  2. 检测Password中是否有空格。

  3. 检测许可证所需长度。

  4. 处理Name中的'和"。

  5. 替换Password中所有的O、o为0,l为1。

  6. 检测许可证类型。

  7. 验证许可证。

对每个步骤详细分析。

1

判断Name和Password是否为空


注册流程中的为空判断不止一处,都是通过调用QString::isEmpty()函数实现。
.text:00E08146                 push    eax.text:00E08146 ;   } // starts at E0812D.text:00E08147 ;   try {.text:00E08147                 mov     byte ptr [ebp+var_4], 1.text:00E0814B                 call    edi ; QLineEdit::text(void) ; 获取输入的Name.text:00E0814D                 mov     ecx, eax.text:00E0814D ;   } // starts at E08147.text:00E0814F ;   try {.text:00E0814F                 mov     byte ptr [ebp+var_4], 2.text:00E08153                 call    ds:?isEmpty@QString@@QBE_NXZ ; QString::isEmpty(name).....text:00E081A5                 mov     ecx, [esi+74h].text:00E081A8                 lea     eax, [ebp+buffer].text:00E081AB                 push    eax.text:00E081AC                 call    edi ; QLineEdit::text(void) ; 获取输入的Password.text:00E081AE                 mov     ebx, 1.text:00E081AE ;   } // starts at E0818A.text:00E081B3 ;   try {.text:00E081B3                 mov     byte ptr [ebp+var_4], 4.text:00E081B7                 mov     ecx, eax.text:00E081B9                 mov     [ebp+var_1C], ebx.text:00E081BC                 call    ds:?isEmpty@QString@@QBE_NXZ ; QString::isEmpty(password).text:00E081C2                 test   al, al.text:00E081C4                 jnz     short loc_E08213

2

检测Password中是否有空格


判断Password中是否存在空格,如果存在,则许可证无效。
.text:00E081F2                 mov     [ebp+var_4], 6.text:00E081F9                 push    ecx.text:00E081FA                 mov     ebx, 7.text:00E081FF                 mov     ecx, eax.text:00E08201                 mov     [ebp+var_1C], ebx.text:00E08204                 call    ds:?indexOf@QString@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z ; QString::indexOf(password, " ", 0, 1).text:00E0820A                 mov     [ebp+password_flag], 0.text:00E0820E                 cmp     eax, 0FFFFFFFFh.text:00E08211                 jz     short loc_E08217

3

检测Password所需长度


在0x00E082C3处的sub_4080AF函数,负责检测Password的第7、第8位,判断Password所需的长度。

首先判断Password的长度是否大于9(注:用于检测的Password是含有"-"字符的)。

.text:00E096C9                 mov     esi, [ebp+arg_0].text:00E096CC                 mov     ecx, esi.text:00E096CE                 call    ds:?length@QString@@QBEHXZ ; QString::length(password).text:00E096D4                 cmp     eax, 9.text:00E096D7                 jl     loc_E0976A

然后获取Password中第7和第8位,并且转成大写字母。

.text:00E096E2                 push    eax.text:00E096E3                 push   7.text:00E096E5                 lea     eax, [ebp+var_A].text:00E096E8                 push    eax.text:00E096E9                 call    ds:??AQString@@QBE?BVQChar@@H@Z ; QString::at(password, 7).text:00E096EF                 mov     ecx, eax.text:00E096F1                 call    ds:?toUpper@QChar@@QBE?AV1@XZ ; QChar::toUpper(password[7]).text:00E096F7                 mov     ecx, esi.text:00E096F9                 movzx   eax, word ptr [eax].text:00E096FC                 mov     [ebp+var_4], ax.text:00E09700                 lea     eax, [ebp+arg_0+2].text:00E09703                 push    eax.text:00E09704                 push   8.text:00E09706                 lea     eax, [ebp+var_A].text:00E09709                 push    eax.text:00E0970A                 call    ds:??AQString@@QBE?BVQChar@@H@Z ; QString::at(password, 8).text:00E09710                 mov     ecx, eax.text:00E09712                 call    ds:?toUpper@QChar@@QBE?AV1@XZ ; QChar::toUpper(password[8])

比较第8位是否为'C'。

.text:00E09718                 push   43h.text:00E0971A                 lea     ecx, [ebp+arg_0+2].text:00E0971D                 movzx   eax, word ptr [eax].text:00E09720                 mov     [ebp+var_8], ax.text:00E09724                 call    ds:??0QChar@@QAE@H@Z ; QChar::QChar('C').text:00E0972A                 movzx   eax, [ebp+var_8].text:00E0972E                 cmp     ax, word ptr [ebp+arg_0+2].text:00E09732                 jnz     short loc_E0976A

比较第7位是否为'9'和'F'。

.text:00E09734                 push   39h.text:00E09736                 lea     ecx, [ebp+arg_0+2].text:00E09739                 call    ds:??0QChar@@QAE@H@Z ; QChar::QChar('9').text:00E0973F                 mov     ax, [ebp+var_4].text:00E09743                 cmp     ax, word ptr [ebp+arg_0+2].text:00E09747                 jz     short loc_E0975E.text:00E09749                 push   46h.text:00E0974B                 lea     ecx, [ebp+arg_0+2].text:00E0974E                 call    ds:??0QChar@@QAE@H@Z ; QChar::QChar('F').text:00E09754                 mov     ax, [ebp+var_4].text:00E09758                 cmp     ax, word ptr [ebp+arg_0+2].text:00E0975C                 jnz     short loc_E0976A

经过测试可知,当Password第7和第8位为“9C”和“FC”时,Password的长度为0x13(即19),而其他情况下,Password长度为0x18(即24)。

4

处理Name中的'和"


在0x00E08302处的sub_409B97函数负责提取Name中的单引号和双引号中的内容。
.text:00E082F7                 mov     ecx, dword_2EEBAC4.text:00E082FD                 push    eax.text:00E082FD ;   } // starts at E08286.text:00E082FE ;   try {.text:00E082FE                 mov     byte ptr [ebp+var_4], 8.text:00E08302                 call   j_NameHandle    ; 处理Name中的'和"

5

替换Password中所有的O、o为0,l为1


位于0x00E0831E处的函数用于处理Password中的0、o和l。

.text:00E08314                 mov     ecx, dword_2EEBAC4.text:00E0831A                 lea     eax, [ebp+password].text:00E0831D                 push    eax.text:00E0831E                 call   j_ReplaceOAndoAndl ; 将Password左边19位中的Ool分别替换为0和1

6

检测许可证类型

在0x00E08330调用许可证类型检测函数。

程序先将Password全部转换成十六进制数字,按两位一字节保存起来。

.text:013F5F1A                 lea     eax, [ebp+var_24].text:013F5F1D                 mov     ecx, edi.text:013F5F1F                 push    eax.text:013F5F20                 call   j_ToHexDigital  ; Password转为十六进制数字

转换方法为:

  1. 将Password每一位转为十六进制数字。

  2. 然后按公式[奇数位]<<4+[偶数位]计算后存储。

接着,判断Name是否为"999",如果是,则直接返回0xE7。

.text:013F5F25                 mov     esi, offset num_999.text:013F5F2A                 lea     ebx, [ebx+0].text:013F5F30.text:013F5F30 loc_13F5F30:                            ; CODE XREF: CheckLicenseType+9B↓j.text:013F5F30                 push   dword ptr [esi].text:013F5F32                 mov     ecx, ebx.text:013F5F34                 call    ds:??8QString@@QBE_NPBD@Z ; QString::operator==(char const *).text:013F5F3A                 test   al, al.text:013F5F3C                 jnz     loc_13F6165

然后,检测Password第6和第7位数字,判断许可证类型。

许可证类型有三个取值:0x9C、0xFC、0xAC。

0x9C-多用户许可证类型


0x9C为多用户许可证类型,其验证操作为:

首先执行两个计算。

公式1:((Password[0]<<4+password[1]) ^ (Password[12]<<4+password[13])^0x18+0x3D)^A7&0xFF
公式2:(Password[2]<<4+password[3]) ^ (Password[14]<<4+password[15]) * 0x100 + (Password[4]<<4+password[5]) ^ (Password[10]<<4+password[11])&& 0xFF

注:其中Password只包含十六进制数字,不包含“-”。第一个公式以Byte类型计算,第二个公式以Word类型计算。

第二个公式计算的结果用于设置许可证类型验证标志。

然后对name进行加密操作。

.text:013F60A5                 push    eax.text:013F60A6                 call   j_Encry_Name

其加密过程如下:

  1. 将name每一位转为大写字母。

  2. 从密码表[name[i]*4]中取出DWORD值。

  3. 与上一次循环结果相加,初始值为0。

  4. 密码表[name[i]*4] ^ 密码表[(name[i]+0xD)&0xFF*4] * 密码表[(name[i]+0x2F)&0xFF*4]。

  5. 第4步结果 + 密码表[0x9*(i)*4] + 密码表[(公式2<<4-公式2 + 0xD*i)&FF*4] + 密码表[0x13*i*4]。

加密后使用加密结果与Password进行比较。

.text:013F60AB                 mov     edx, eax.text:013F60AD                 add     esp, 10h.text:013F60B0                 cmp     [ebp+var_20], dl ; 加密结果的后两位与Password的第8位和第9位数字比较.text:013F60B3                 jnz     loc_13F613A.text:013F60B9                 mov     ecx, edx.text:013F60BB                 shr     ecx, 8.text:013F60BE                 cmp     bh, cl          ; 加密结果第4、5位与Password第10、11位数字比较.text:013F60C0                 jnz     short loc_13F613A.text:013F60C2                 mov     ecx, edx.text:013F60C4                 shr     ecx, 10h.text:013F60C7                 cmp     [ebp+var_1E], cl ; 加密结果第2、3位与Password第12、13位数字比较.text:013F60CA                 jnz     short loc_13F613A.text:013F60CC                 shr     eax, 18h.text:013F60CF                 cmp     [ebp+var_1D], al ; 加密结果第0、1位与Password第14、15位数字比较.text:013F60D2                 jnz     short loc_13F613A

最后使用第一个公式计算结果与0xA比较,如果大于或等于则通过验证。

.text:013F60D9                 mov     eax, [ebp+arg_0].text:013F60DC                 cmp     eax, [edi+1Ch].text:013F60DF                 jbe     short Success_Result

0xFC-单许可证类型


0xFC为单许可证类型,其验证操作为:

直接对标志位进行赋值。

.text:013F5FCD                 mov     dword ptr [edi+1Ch], 0FFh ; 验证通过标志设置为0xFF.text:013F5FD4                 mov     esi, 0FFh.text:013F5FD9                 mov     dword ptr [edi+20h], 1 ; 许可证类型标志设置为0x1.text:013F5FE0                 mov     dword ptr [edi+30h], 1

加密方式被修改。

.text:013F6094                 cmp     bl, 0FCh.text:013F6097                 lea     ecx, [ebp+var_14].text:013F609A                 push    esi.text:013F609B                 setnz   al              ; 加密方式标志

其加密过程如下:

  1. 将name每一位转为大写字母。

  2. 从密码表[name[i]*4]中取出DWORD值。

  3. 与上一次循环结果相加,初始值为0。

  4. 密码表[name[i]4] ^ 密码表[(name[i]+0x3F)&0xFF4] * 密码表[(name[i]+0x17)0xFF*4]。

  5. 第4步结果 + 密码表[(0xFF<<4+0xFF)&0xFF4] + 密码表[(0x1<<4-0x1)4] + 密码表[0x78i4]。

加密后的与Password进行比较,其他与0x9C一样,只是在最后增加了一次计算比较。

.text:013F60ED                 movzx   ecx, [ebp+var_22].text:013F60F1                 movzx   eax, [ebp+var_23].text:013F60F5                 shl     ecx, 8.text:013F60F8                 add     ecx, eax.text:013F60FA                 movzx   eax, [ebp+var_24].text:013F60FE                 shl     ecx, 8.text:013F6101                 push    edx.text:013F6102                 add     ecx, eax.text:013F6104                 push    ecx.text:013F6105                 call   SingleCmp

其内部如下:

.text:013F5280                 push    ebp.text:013F5281                 mov     ebp, esp.text:013F5283                 mov     ecx, [ebp+arg_0].text:013F5286                 mov     eax, 0F0F0F0F1h.text:013F528B                 xor     ecx, [ebp+arg_4].text:013F528E                 xor     ecx, 22C078h.text:013F5294                 sub     ecx, 2C175h.text:013F529A                 xor     ecx, 0FFE53167h.text:013F52A0                 and     ecx, 0FFFFFFh.text:013F52A6                 mul     ecx.text:013F52A8                 shr     edx, 4.text:013F52AB                 mov     eax, edx.text:013F52AD                 shl     eax, 4.text:013F52B0                 add     eax, edx.text:013F52B2                 sub     ecx, eax.text:013F52B4                 mov     eax, 0.text:013F52B9                 cmovz   eax, edx.text:013F52BC                 pop     ebp.text:013F52BD                 retn

分析后,总结如下:

  1. Password前6位数字相加:Password[4]<<20+Password[5]<<16+Password[2]<<12+Password[3]<<8+Password[0]<<4+Password[1]。

  2. (第一步结果 ^ name加密结果 ^ 0x22C078 - 0x2C175) ^ 0xFFE53167 & 0xFFFFFF * 0xF0F0F0F1。

  3. (第一步结果 ^ name加密结果 ^ 0x22C078 - 0x2C175) ^ 0xFFE53167 & 0xFFFFFF - (第二步结果的高位4字节>>0x4 + (第二步结果的高位4字节>>0x4)<<0x4)

  4. 最后计算结果必须为0。

不过该许可证似乎已经不能使用了,根据流程是不可能进入正确提示的。

0xAC-时间许可证类型

0xAC的验证操作为:

执行两个计算:

(password[2]<<4+password[3]) ^ (password[14]<<4+password[15]) * 0x100(第一步结果 + (password[4]<<4+password[5]) ^ (password[10]<<4+password[11]) & 0xFF)0xFFFF

将上面计算结果作为公式2的参数输入。

再次进行两个计算。

(password[18]<<4+password[19]) ^ (password[10]<<4+password[11])(password[16]<<4+password[17]) ^ (password[8]<<4+password[9])(第一步结果<<0x8 + 第二步结果)<<0x8 + (password[0]<<4+password[1]) ^ (password[12]<<4+password[13])

将上面计算结果和0x0x5B8C27作为公式3的参数输入。

最后计算出的结果与0x4596比较,如果大于或等于,则通过验证。

最后测试可用的许可证:

Name: testPassword: 0125C09C5903B48C
附录

Name加密密码表



B8 44 CB 39 67 4F 75 23 11 72 01 5F DA 24 BB 3EC6 07 17 35 4B 77 F9 63 88 72 82 17 21 48 E7 0F0F 67 5F 5B E8 5A 31 48 69 77 5B 78 47 15 7A 2B92 12 D1 38 32 1B A1 42 44 22 33 35 60 7B 43 7710 3B AB 1E 00 00 81 53 AE 12 02 1D A8 77 03 6F92 30 C0 43 8E 0A 3C 2D BF 0C 95 62 FA 6F F0 30E0 10 F7 34 FB 17 F4 28 95 2F 0D 35 5A 1D 36 5A0B 06 CC 15 CC 13 FD 0A CF 3B 60 28 6B 06 71 33E4 14 CD 30 67 3A 5D 17 13 6A D6 6D F9 09 34 2D82 7B 1E 58 99 6B 52 76 88 51 8D 5C 71 79 85 2CC0 1F F5 15 11 0D CC 68 5C 5E F5 49 64 43 5E 27BC 0D 1E 2D E3 7C EE 4C 40 58 55 32 08 2E 2E 115A 06 78 69 06 14 92 72 E7 78 45 31 B7 21 56 17BF 1D 77 40 D6 38 C2 3F 8A 12 31 4A 6E 03 AD 2DD6 69 A0 41 92 01 40 25 67 46 DD 00 4F 1F FC 6ACE 40 10 57 DF 66 FE 62 3E 4B DB 41 1F 23 82 359A 07 F6 55 44 06 A7 1C D2 43 16 1B C9 28 72 3F70 10 14 5F AB 74 14 3E 6E 25 4B 44 D9 50 70 534B 09 42 0F E6 20 D8 2F 5E 2E 8B 77 02 6D 17 7169 7A EA 7F 28 46 B5 5B 71 6C BA 19 99 3A 76 39CD 54 8D 17 88 6E 24 01 7E 53 13 33 17 2D 8E 2BBE 10 3D 2A 82 05 D1 59 DB 63 A1 37 9A 48 D6 3046 5C 21 6A 76 7A 1C 0E E7 60 C7 1F 65 0C B8 79B4 59 F4 27 26 73 9A 79 82 17 BA 50 5C 6D 11 2A1B 6E 86 63 3C 0E 92 3F 90 34 02 55 89 60 B5 55D1 1F 39 2C C2 35 80 2F 7A 2B FD 64 9A 75 E8 4CF0 04 85 51 A8 01 95 79 AD 2C 5B 3F 60 01 E6 38D8 41 76 63 42 2A 35 33 19 2C A2 51 51 58 5C 08AB 17 29 03 C7 0A 77 2B B3 77 AC 30 07 19 EC 2BD0 02 52 03 D3 33 A9 0F F3 5D 25 61 BF 06 AD 2271 69 B8 58 E5 0D CA 5F 56 64 0D 70 DB 73 A9 56FD 59 B7 5A E2 0B 0E 33 DD 0D 3C 5B 60 3C 5D 49A6 59 BD 53 91 6D 5E 4C 8D 31 D9 49 79 50 3D 10E3 42 CE 61 1D 12 D5 7E ED 60 E1 14 F2 4E 2D 21F0 33 01 27 96 5A 43 62 8B 5E A7 1F BE 2F 09 6F49 0D 00 4A 70 1C AE 57 77 24 4E 00 72 7E 1E 5633 00 8C 46 02 24 CC 5D C6 7A 50 78 C7 24 AF 5834 2D F6 0D 08 47 8A 35 11 1E FB 3C 1C 45 71 2B95 52 A7 77 21 07 89 56 F3 75 EF 0F F1 24 0F 12E7 0A 99 01 52 44 9C 33 8E 5B A1 27 6D 27 A7 0B7B 1B DC 60 82 7F 4B 4F 07 70 DB 67 D9 57 4A 4FE8 52 12 62 FC 2C 53 20 06 03 39 6A 23 04 80 188A 77 F3 19 F0 16 23 46 37 09 AE 56 5C 67 C2 43FD 45 CA 65 F2 4F 60 0D CB 22 FD 0B 3B 64 FE 3AA6 7F F6 3B 79 35 62 44 F8 31 40 18 97 4F 17 322A 09 6A 4C 61 02 B5 5F 74 01 65 01 F1 4A 63 33F4 18 2D 71 69 71 99 6E FE 7A AB 5D E8 2E 2B 7CB4 75 DB 6E B6 6F 83 5F D6 6D 2A 3C C2 05 2D 29DB 44 22 05 4F 5F 9A 14 40 65 48 5D EA 15 1D 3320 69 45 4F 9F 69 3A 48 05 0F 45 3B 6C 7C 20 3BFE 70 9D 74 F6 61 74 41 F1 31 B0 62 7B 57 50 2733 15 13 29 08 38 8C 58 56 34 EF 1A EC 00 3C 0F42 47 A7 7D 6C 7A 79 4B 87 32 BB 5E B8 58 65 78F2 4F ED 00 1E 69 69 62 5F 25 A2 24 7E 1F C1 62CD 7D 8A 2F FE 17 3B 64 B8 18 83 77 FE 60 3B 25A3 63 BB 34 4F 21 03 5B F4 71 15 5F 9F 6E 31 1A04 27 CF 7A 38 68 89 28 77 46 61 18 EB 69 F5 1BC9 5E A8 0B 46 6B CA 6A 2A 42 43 1E 0E 5F 4D 518C 01 3E 41 E9 26 76 30 FA 1D ED 01 5A 6F F4 492B 64 1B 46 F2 07 70 7D 57 26 65 13 C5 0B 16 6B49 48 E0 65 1C 6E 52 1F B6 51 02 5A 69 3F D7 2BCD 7A BF 2D 80 3E E6 51 0F 67 F2 5C 03 0A CD 2161 02 FF 5C 1E 06 AE 33 5F 34 B6 3B 75 4A 81 5DF4 5D 7B 25 5B 2C 5C 0A 27 55 A4 16 45 39 F2 16
公式1

(参数1^0x18+0x3D)^A7&0xFF
公式2


(参数1^0x7892+0x4D30)^0x3421&0xFFFF / 0xB,如果余数为0,则结果为1,否则为0。
公式3

(参数1 ^ 参数2 ^ 0x22C078 - 0x2C175) ^ 0xFFE53167 & 0xFFFFFF * 0xF0F0F0F1(参数1 ^ 参数2 ^ 0x22C078 - 0x2C175) ^ 0xFFE53167 & 0xFFFFFF - (第一步结果的高位4字节>>0x4 + (第一步结果的高位4字节>>0x4)<<0x4)结果需要为0





179.jpg
——我不是懒,我只是懒得签名而已。PS:汽泡菌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2020 汽泡菌®精酿啤酒APP Whale shark Technology Co.,Ltd ( 陕ICP备19021550号 )|网站地图