0040A19C /$ 55 PUSH EBP 0040A19D |. 8BEC MOV EBP,ESP 0040A19F |. 83EC 14 SUB ESP,14 0040A1A2 |. 53 PUSH EBX 0040A1A3 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; EAX = soul code 0040A1A6 |. 56 PUSH ESI 0040A1A7 |. 83C0 04 ADD EAX,4 ; sets EAX to the last 12 digits of the soul code 0040A1AA |. 57 PUSH EDI 0040A1AB |. BE E7D10000 MOV ESI,0D1E7 ; constant 0040A1B0 |. 6A 08 PUSH 8 ; /maxlen = 8 0040A1B2 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] ; |sets ECX to buffer 0040A1B5 |. 50 PUSH EAX ; |src 0040A1B6 |. 51 PUSH ECX ; |dest 0040A1B7 |. FF15 30B6D800 CALL DWORD PTR DS:[<&MSVCRT.strncpy>] ; \strncpy 0040A1BD |. 83C4 0C ADD ESP,0C 0040A1C0 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] 0040A1C3 |. C645 F4 00 MOV BYTE PTR SS:[EBP-C],0 ; this ensures that only the first 8 digits are on the buffer 0040A1C7 |. 6A 0A PUSH 0A ; /radix = A (10.) 0040A1C9 |. BB 48D44D00 MOV EBX,Souls.004DD448 ; | 0040A1CE |. 6A 00 PUSH 0 ; |endptr = NULL 0040A1D0 |. 51 PUSH ECX ; |s 0040A1D1 |. FF15 14B6D800 CALL DWORD PTR DS:[<&MSVCRT.strtoul>] ; \strtoul 0040A1D7 |. 83C4 0C ADD ESP,0C 0040A1DA |. 8BF8 MOV EDI,EAX 0040A1DC |. 81FF 08070000 CMP EDI,708 ; are the first 8 digits smaller than 00002055d ? 0040A1E2 |. 7C 05 JL SHORT Souls.0040A1E9 0040A1E4 |. BB 88D44D00 MOV EBX,Souls.004DD488 0040A1E9 |> 81FF E40C0000 CMP EDI,0CE4 ; are the first 8 digits smaller than 00058380d ? 0040A1EF |. 7C 05 JL SHORT Souls.0040A1F6 0040A1F1 |. BB C8D44D00 MOV EBX,Souls.004DD4C8 0040A1F6 |> 33C9 XOR ECX,ECX ; initializing counter 0040A1F8 |> 33C0 /XOR EAX,EAX ; crypto 0040A1FA |. 8B55 08 |MOV EDX,DWORD PTR SS:[EBP+8] 0040A1FD |. C745 F8 64000000 |MOV DWORD PTR SS:[EBP-8],64 ; another constant 0040A204 |. 8A040A |MOV AL,BYTE PTR DS:[EDX+ECX] 0040A207 |. 83E0 7F |AND EAX,7F 0040A20A |. 8BD0 |MOV EDX,EAX 0040A20C |. D3E0 |SHL EAX,CL 0040A20E |. 0FAFD6 |IMUL EDX,ESI 0040A211 |. 33F2 |XOR ESI,EDX 0040A213 |. 8B148B |MOV EDX,DWORD PTR DS:[EBX+ECX*4] 0040A216 |. 03F0 |ADD ESI,EAX 0040A218 |. 41 |INC ECX 0040A219 |. 8BC6 |MOV EAX,ESI 0040A21B |. 8955 FC |MOV DWORD PTR SS:[EBP-4],EDX 0040A21E |. 99 |CDQ 0040A21F |. F77D F8 |IDIV DWORD PTR SS:[EBP-8] 0040A222 |. 0155 FC |ADD DWORD PTR SS:[EBP-4],EDX 0040A225 |. 2B75 FC |SUB ESI,DWORD PTR SS:[EBP-4] 0040A228 |. 83F9 0C |CMP ECX,0C 0040A22B |.^ 7C CB \JL SHORT Souls.0040A1F8 0040A22D |. 81E6 FFFFFF7F AND ESI,7FFFFFFF 0040A233 |. 81FF E40C0000 CMP EDI,0CE4 0040A239 |. 7D 12 JGE SHORT Souls.0040A24D 0040A23B |. B9 2FFF0000 MOV ECX,0FF2F 0040A240 |. 8BC6 MOV EAX,ESI 0040A242 |. 99 CDQ 0040A243 |. F7F9 IDIV ECX 0040A245 |. 8BF2 MOV ESI,EDX 0040A247 |. 81E6 FFFF0000 AND ESI,0FFFF 0040A24D |> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] 0040A250 |. 85C0 TEST EAX,EAX 0040A252 |. 74 02 JE SHORT Souls.0040A256 0040A254 |. 8938 MOV DWORD PTR DS:[EAX],EDI 0040A256 |> 8BC6 MOV EAX,ESI 0040A258 |. 5F POP EDI 0040A259 |. 5E POP ESI 0040A25A |. 5B POP EBX 0040A25B |. 8BE5 MOV ESP,EBP 0040A25D |. 5D POP EBP 0040A25E \. C3 RETN