Продолжаю тему реверса алгоритма, ссылка на первую статью https://habr.com/ru/articles/1064990/. В этой части доведу реверс до конца, постараюсь показать как делать не надо, почему декомпиляция хорошо, а эмуляция лучше )

Мы остановились на процедурке sub_1DBE83C, по предварительному анализу она вызывается за весь код 2 раза:

  • Первый раз с параметрами (dest = 0x3c, source = 50, всего = x0x10),

  • C этим блоком делается SHA-1 (dest=0x10, source=0x3c, всего = x0x10),

  • Второй вызов (куда=0x0, откуда=0x10, всего = x0x10)

ROM:01DBE83C sub_1DBE83C                             ; CODE XREF: sub_1D853D0+8Cp
ROM:01DBE83C                                         ; sub_1D853D0+C8p ...
ROM:01DBE83C
ROM:01DBE83C var_9C          = -0x9C
ROM:01DBE83C var_8C          = -0x8C
ROM:01DBE83C
ROM:01DBE83C                 STMFD   SP!, {R4,R5,LR}
ROM:01DBE840                 SUB     SP, SP, #0xA0	; свой блок данных размером 0xA0
ROM:01DBE844                 MOV     R4, R1
ROM:01DBE848                 LDR     R1, =0x2105B04	; тут лежат константы
ROM:01DBE84C                 MOV     R5, R0
ROM:01DBE850                 LDMIA   R1, {R1,R3,R12,LR}
ROM:01DBE854                 ADD     R0, SP, #0x10
ROM:01DBE858                 STMIA   R0, {R1,R3,R12,LR}	; запишем себе
ROM:01DBE85C                 LDR     R1, =0x2105B14	; и тут константы
ROM:01DBE860                 MOV     R0, SP
ROM:01DBE864                 LDMIA   R1, {R1,R3,R12,LR}
ROM:01DBE868                 STMIA   R0, {R1,R3,R12,LR} ; Покажу их сразу в стеке
ROM:01DBE86C                 ADD     R1, SP, #0x20
ROM:01DBE870                 ADD     R0, SP, #0x10
ROM:01DBE874                 BL      sub_1DBC554	; первая процедура
ROM:01DBE878                 ADD     R2, SP, #0x20   
ROM:01DBE87C                 MOV     R1, R4          
ROM:01DBE880                 MOV     R0, R5          
ROM:01DBE884                 BL      sub_1DBCEF0	; вторая процедура
ROM:01DBE888                 ADD     SP, SP, #0xA0
ROM:01DBE88C                 LDMFD   SP!, {R4,R5,PC}
ROM:01DBE88C ; End of function sub_1DBE83C

Код выделяет блок памяти размером 0xa0, заполняет начальные данные константами, далее вызываются 2 процедуры: sub_1DBC554 и sub_1DBCEF0. С разбора sub_1DBC554 и начнем. Постараюсь писать коротко, чтобы не копировать листинги после каждого решения.

Первое что нужно сделать - подготовить эмулятор, установить точку останова на начало функциии, запустить.

Bathfile такой же, только меняем точку останова:

b::
reset
system.option.bigendian on
system.up
data.load.binary "kernel.bin" 0x1B60000

data.set 0x50 %BYTE 0x11
data.set 0x51 %BYTE 0x22
data.set 0x52 %BYTE 0x33
data.set 0x53 %BYTE 0x44
data.set 0x54 %BYTE 0x55
data.set 0x55 %BYTE 0x66
data.set 0x56 %BYTE 0x90
data.set 0x57 %BYTE 0x1B

register.set.pc 0x203D5D8

b.s 0x01DBC554
go

Выделил в стеке начальные загруженные константы.

Не уверен, что нужно было приводить целиком, портянка на 600 строк, без ветвлений.

Листинг функции sub_1DBC554 из IDA

sub_1DBC554
STMFD   SP!, {R4-R10,LR}
LDRB    R5, [R0]
LDRB    R4, [R0,#2]
LDRB    R6, [R0,#1]
LDRB    R7, [R0,#3]
ADD     R0, R5, R4
ADD     R2, R0, #0x47
ADD     R2, R2, #0x8600
ADD     R2, R2, #0x1C80000
ADD     R2, R2, #0x60000000
LDR     LR, =0x224C2F4     ;tab1
AND     R0, R2, #0xFF
LDR     R8, [LR,R0,LSL#2]
MOV     R0, #0xFF
LDR     R12, =0x224C6F4    ;tab2
AND     R3, R0, R2,LSR#8
LDR     R3, [R12,R3,LSL#2]
AND     R9, R0, R2,LSR#16
EOR     R8, R8, R3
LDR     R3, =0x224CAF4     ;tab3
LDR     R9, [R3,R9,LSL#2]
EOR     R9, R8, R9
MOV     R8, R2,LSR#24
LDR     R2, =0x224CEF4     ;tab4
LDR     R8, [R2,R8,LSL#2]
EOR     R8, R9, R8
STR     R8, [R1]	; готово первое значение
SUB     R8, R6, R7
ADD     R8, R8, #0xB9
SUB     R8, R8, #0x8700
SUB     R8, R8, #0x1C80000
ADD     R8, R8, #0xA0000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R9, R10, R9
AND     R10, R0, R8,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R9, R10
EOR     R8, R9, R8
STR     R8, [R1,#4]		;второе, запись 0x4
MOV     R8, R5
MOV     R5, R5,LSR#8
ORR     R5, R5, R6,LSL#24
MOV     R6, R6,LSR#8
ORR     R6, R6, R8,LSL#24
ADD     R8, R5, R4
ADD     R8, R8, #0x8D
ADD     R8, R8, #0x10C00
ADD     R8, R8, #0x3900000
ADD     R8, R8, #0xC0000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#8]		;запись 0x8
SUB     R8, R6, R7
SUB     R8, R8, #0x8D
SUB     R8, R8, #0x10C00
SUB     R8, R8, #0x3900000
ADD     R8, R8, #0x40000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R9, R10, R9
AND     R10, R0, R8,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R9, R10
EOR     R8, R9, R8
STR     R8, [R1,#0xC]		;запись 0xc
MOV     R8, R4
MOV     R4, R4,LSL#8
ORR     R4, R4, R7,LSR#24
MOV     R7, R7,LSL#8
ORR     R7, R7, R8,LSR#24
ADD     R8, R5, R4
ADD     R8, R8, #0x8000001A
ADD     R8, R8, #0x1900
SUB     R8, R8, #0xDE0000
ADD     R8, R8, #0x8000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x10]   	;запись 0x10
SUB     R8, R6, R7
ADD     R8, R8, #0xE6
ADD     R8, R8, #0xE600
ADD     R8, R8, #0xDD0000
ADD     R8, R8, #0x78000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x14]		;запись 0x14
MOV     R8, R5,LSR#8
ORR     R8, R8, R6,LSL#24
MOV     R6, R6,LSR#8
ORR     R5, R6, R5,LSL#24
ADD     R6, R8, R4
ADD     R6, R6, #0x234
ADD     R6, R6, #0x43000
ADD     R6, R6, #0xE400000
AND     R9, R6, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R6,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x18]		;запись 0x18
SUB     R6, R5, R7
SUB     R6, R6, #0x234
SUB     R6, R6, #0x43000
SUB     R6, R6, #0xE400000
AND     R9, R6, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R6,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x1C]		;запись 0x1c
MOV     R6, R4,LSL#8
ORR     R6, R6, R7,LSR#24
MOV     R7, R7,LSL#8
ORR     R4, R7, R4,LSR#24
ADD     R7, R8, R6
ADD     R7, R7, #0x67
ADD     R7, R7, #0x6400
SUB     R7, R7, #0x3780000
ADD     R7, R7, #0x20000000
AND     R9, R7, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R7,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R7,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R10, R9
EOR     R7, R9, R7
STR     R7, [R1,#0x20]		;запись 0x20
SUB     R7, R5, R4
SUB     R7, R7, #0x67
ADD     R7, R7, #0x39C00
ADD     R7, R7, #0x3740000
ADD     R7, R7, #0xE0000000
AND     R9, R7, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R7,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R9, R10, R9
AND     R10, R0, R7,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R9, R10
EOR     R7, R9, R7
STR     R7, [R1,#0x24]		;запись 0x24
MOV     R7, R8,LSR#8
ORR     R7, R7, R5,LSL#24
MOV     R5, R5,LSR#8
ORR     R5, R5, R8,LSL#24
ADD     R8, R7, R6
ADD     R8, R8, #0xCD
ADD     R8, R8, #0xC800
SUB     R8, R8, #0x6F00000
ADD     R8, R8, #0x40000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x28]		;запись 0x28
SUB     R8, R5, R4
SUB     R8, R8, #0xCD
SUB     R8, R8, #0xC800
ADD     R8, R8, #0x6F00000
ADD     R8, R8, #0xC0000000
AND     R9, R8, #0xFF
AND     R10, R0, R8,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R8,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R9, R10
EOR     R8, R9, R8
STR     R8, [R1,#0x2C]		;запись 0x2c
MOV     R8, R6,LSL#8
ORR     R8, R8, R4,LSR#24
MOV     R4, R4,LSL#8
ORR     R4, R4, R6,LSR#24
ADD     R6, R7, R8
ADD     R6, R6, #0x99
ADD     R6, R6, #0x9100
ADD     R6, R6, #0x210000
ADD     R6, R6, #0x72000000
AND     R9, R6, #0xFF
AND     R10, R0, R6,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R6,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R9, R10
EOR     R6, R9, R6
STR     R6, [R1,#0x30]		;запись 0x30
SUB     R6, R5, R4
ADD     R6, R6, #0x67
ADD     R6, R6, #0x6E00
ADD     R6, R6, #0xDE0000
ADD     R6, R6, #0x8D000000
AND     R9, R6, #0xFF
AND     R10, R0, R6,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x34]		;запись 0x34
MOV     R6, R7,LSR#8
ORR     R6, R6, R5,LSL#24
MOV     R5, R5,LSR#8
ORR     R5, R5, R7,LSL#24
ADD     R7, R6, R8
SUB     R7, R7, #0xCF
ADD     R7, R7, #0x32400
SUB     R7, R7, #0x1BC00000
AND     R9, R7, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R7,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R7,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R10, R9
EOR     R7, R9, R7
STR     R7, [R1,#0x38]		;запись 0x38
SUB     R7, R5, R4
ADD     R7, R7, #0xCF
SUB     R7, R7, #0x32400
ADD     R7, R7, #0x1BC00000
AND     R9, R7, #0xFF
AND     R10, R0, R7,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R7,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R9, R10
EOR     R7, R9, R7
STR     R7, [R1,#0x3C]		;;запись 0x3c
MOV     R7, R8,LSL#8
ORR     R7, R7, R4,LSR#24
MOV     R4, R4,LSL#8
ORR     R4, R4, R8,LSR#24
ADD     R8, R6, R7
ADD     R8, R8, #0x62
ADD     R8, R8, #0x4600
ADD     R8, R8, #0x860000
ADD     R8, R8, #0xC8000000
AND     R9, R8, #0xFF
AND     R10, R0, R8,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x40]		;запись 0x40
SUB     R8, R5, R4
ADD     R8, R8, #0x9E
ADD     R8, R8, #0xB900
SUB     R8, R8, #0x870000
ADD     R8, R8, #0x38000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x44]		;запись 0x44
MOV     R8, R6,LSR#8
ORR     R8, R8, R5,LSL#24
MOV     R5, R5,LSR#8
ORR     R5, R5, R6,LSL#24
ADD     R6, R8, R7
SUB     R6, R6, #0x33C
ADD     R6, R6, #0xC9000
ADD     R6, R6, #0x91000000
AND     R9, R6, #0xFF
AND     R10, R0, R6,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x48]		;запись 0x48
SUB     R6, R5, R4
ADD     R6, R6, #0x33C
SUB     R6, R6, #0xC9000
ADD     R6, R6, #0x6F000000
AND     R9, R6, #0xFF
AND     R10, R0, R6,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x4C]		;запись 0x4c
MOV     R6, R7,LSL#8
ORR     R6, R6, R4,LSR#24
MOV     R4, R4,LSL#8
ORR     R4, R4, R7,LSR#24
ADD     R7, R8, R6
ADD     R7, R7, #0x188
ADD     R7, R7, #0x11800
ADD     R7, R7, #dword_2180000
ADD     R7, R7, #0x20000000
AND     R9, R7, #0xFF
AND     R10, R0, R7,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R7,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R9, R10
EOR     R7, R9, R7
STR     R7, [R1,#0x50]		;запись 0x50
SUB     R7, R5, R4
ADD     R7, R7, #0x278
ADD     R7, R7, #0x2E400
SUB     R7, R7, #loc_21C0000
ADD     R7, R7, #0xE0000000
AND     R9, R7, #0xFF
AND     R10, R0, R7,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R7,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R9, R10
EOR     R7, R9, R7
STR     R7, [R1,#0x54]		;;запись 0x54
MOV     R7, R8,LSR#8
ORR     R7, R7, R5,LSL#24
MOV     R5, R5,LSR#8
ORR     R5, R5, R8,LSL#24
ADD     R8, R7, R6
SUB     R8, R8, #0xF1
ADD     R8, R8, #0x23400
ADD     R8, R8, #0x4300000
ADD     R8, R8, #0x40000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R8,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R10, R9
EOR     R8, R9, R8
STR     R8, [R1,#0x58]		;запись 0x58
SUB     R8, R5, R4
ADD     R8, R8, #0xF1
SUB     R8, R8, #0x23400
SUB     R8, R8, #0x4300000
ADD     R8, R8, #0xC0000000
AND     R9, R8, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R8,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R9, R10, R9
AND     R10, R0, R8,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R8, R8,LSR#24
LDR     R8, [R2,R8,LSL#2]
EOR     R9, R9, R10
EOR     R8, R9, R8
STR     R8, [R1,#0x5C]		;запись 0x5c
MOV     R8, R6,LSL#8
ORR     R8, R8, R4,LSR#24
MOV     R4, R4,LSL#8
ORR     R4, R4, R6,LSR#24
ADD     R6, R7, R8
ADD     R6, R6, #0x8000001D
ADD     R6, R6, #0x6600
ADD     R6, R6, #0x640000
ADD     R6, R6, #0x8000000
AND     R9, R6, #0xFF
AND     R10, R0, R6,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x60]		;запись 0x60
SUB     R6, R5, R4
ADD     R6, R6, #0xE3
SUB     R6, R6, #0x6700
ADD     R6, R6, #0x39C0000
ADD     R6, R6, #0x74000000
AND     R9, R6, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R6,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R6,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R6, R6,LSR#24
LDR     R6, [R2,R6,LSL#2]
EOR     R9, R10, R9
EOR     R6, R9, R6
STR     R6, [R1,#0x64]		;запись 0x64
MOV     R6, R7,LSR#8
ORR     R6, R6, R5,LSL#24
MOV     R5, R5,LSR#8
ORR     R5, R5, R7,LSL#24
ADD     R7, R6, R8
ADD     R7, R7, #0x3A
ADD     R7, R7, #0xCC00
ADD     R7, R7, #0xC80000
ADD     R7, R7, #0x10000000
AND     R9, R7, #0xFF
AND     R10, R0, R7,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R9, R9, R10
AND     R10, R0, R7,LSR#16
LDR     R10, [R3,R10,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R9, R10
EOR     R7, R9, R7
STR     R7, [R1,#0x68]		;запись 0x68
SUB     R7, R5, R4
SUB     R7, R7, #0x3A
ADD     R7, R7, #0x33400
SUB     R7, R7, #0xCC0000
ADD     R7, R7, #0xF0000000
AND     R9, R7, #0xFF
AND     R10, R0, R7,LSR#8
LDR     R10, [R12,R10,LSL#2]
LDR     R9, [LR,R9,LSL#2]
EOR     R10, R9, R10
AND     R9, R0, R7,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R7, R7,LSR#24
LDR     R7, [R2,R7,LSL#2]
EOR     R9, R10, R9
EOR     R7, R9, R7
STR     R7, [R1,#0x6C]		;запись 0x6c
MOV     R7, R8,LSL#8
ORR     R7, R7, R4,LSR#24
MOV     R4, R4,LSL#8
ORR     R8, R4, R8,LSR#24
ADD     R4, R6, R7
ADD     R4, R4, #0x73
ADD     R4, R4, #0x19800
ADD     R4, R4, #0x1900000
ADD     R4, R4, #0x20000000
AND     R9, R4, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R4,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R4,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R4, R4,LSR#24
LDR     R4, [R2,R4,LSL#2]
EOR     R9, R10, R9
EOR     R4, R9, R4
STR     R4, [R1,#0x70]		;;запись 0x70
SUB     R4, R5, R8
SUB     R4, R4, #0x73
SUB     R4, R4, #0x19800
ADD     R4, R4, #0xE700000
ADD     R4, R4, #0xD0000000
AND     R9, R4, #0xFF
LDR     R10, [LR,R9,LSL#2]
AND     R9, R0, R4,LSR#8
LDR     R9, [R12,R9,LSL#2]
EOR     R10, R10, R9
AND     R9, R0, R4,LSR#16
LDR     R9, [R3,R9,LSL#2]
MOV     R4, R4,LSR#24
LDR     R4, [R2,R4,LSL#2]
EOR     R9, R10, R9
EOR     R4, R9, R4
STR     R4, [R1,#0x74]		;запись 0x74
MOV     R4, R6,LSR#8
ORR     R4, R4, R5,LSL#24
ADD     R4, R4, R7
ADD     R4, R4, #0xE5
ADD     R4, R4, #0x33000
ADD     R4, R4, #0x3200000
MOV     R5, R5,LSR#8
ORR     R5, R5, R6,LSL#24
ADD     R4, R4, #0x40000000
AND     R6, R4, #0xFF
LDR     R7, [LR,R6,LSL#2]
AND     R6, R0, R4,LSR#8
LDR     R6, [R12,R6,LSL#2]
EOR     R7, R7, R6
AND     R6, R0, R4,LSR#16
LDR     R6, [R3,R6,LSL#2]
MOV     R4, R4,LSR#24
LDR     R4, [R2,R4,LSL#2]
EOR     R6, R7, R6
EOR     R4, R6, R4
STR     R4, [R1,#0x78]		;запись 0x78
SUB     R4, R5, R8
SUB     R4, R4, #0xE5
ADD     R4, R4, #0xCD000
SUB     R4, R4, #0x3300000
ADD     R4, R4, #0xC0000000
AND     R5, R4, #0xFF
LDR     LR, [LR,R5,LSL#2]
AND     R5, R0, R4,LSR#8
AND     R0, R0, R4,LSR#16
LDR     R0, [R3,R0,LSL#2]
LDR     R12, [R12,R5,LSL#2]
MOV     R3, R4,LSR#24
LDR     R2, [R2,R3,LSL#2]
EOR     R12, LR, R12
EOR     R0, R12, R0
EOR     R0, R0, R2
STR     R0, [R1,#0x7C]		;запись последнего значения, 0x7С
LDMFD   SP!, {R4-R10,PC}
; End of function sub_1DBC554

В своем коде тоже выполним предварительную подготовку, каркас функции sub_1DBE83C - инициализацию блока памяти. Забегая вперед - в начале функции видно, что используются таблички констант, идут подряд, размер 0x400. Сохраним их сразу в файлы и загрузим в свой код.

Сохраняем, выполнить поочереди команды в консоли или отдельным batch-файлом:

data.save.binary "tab1.bin" 0x0224C2F4--(0x0224C2F4+0x400-1)
data.save.binary "tab2.bin" 0x0224C6F4--(0x0224C6F4+0x400-1)
data.save.binary "tab3.bin" 0x0224CAF4--(0x0224CAF4+0x400-1)
data.save.binary "tab4.bin" 0x0224CEF4--(0x0224CEF4+0x400-1)

Как проще всего затащить в python? Я открываю в редакторе HxD (очень удобная, простая утилита, часто пользуюсь):

Ctrl+A, Ctrl-C и в питон в bytes.fromhex("29 89 A1…

    stack = bytearray(256)
    const_b04 = [0xD073015C, 0x3C754BC2, 0xC18CE94A, 0xB0D10F3E]
    const_b14 = [0x268D66A7, 0x35A81A81, 0x6FBAD9FA, 0x36162501]

    # обрезал тут таблички, каждая размером 0x400
    tab1=bytes.fromhex("29 89 A1 A8 05 85 81 84 16 .... 92 98")
    tab2=bytes.fromhex("38 38 08 30 E8 28 C8 E0 2C .... 87 B3")
    tab3=bytes.fromhex("A1 A8 29 89 81 84 05 85 D2 .... 1A 8A")
    tab4=bytes.fromhex("08 30 38 38 C8 E0 E8 28 0D .... B4 37")

    for i, val in enumerate(const_b04):
        write_u32(0x64 + (i * 4), val)

    for i, val in enumerate(const_b14):
        write_u32(0x54 + (i * 4), val)

По листингу видно, что это какой-то развернутый цикл, но смущают разные константы, поэтому начал всё переписывать построчно… В эмуляторе тапаем по F2, в питоне сверяем. Начинает что-то получаться. Пропущу мучения с построчным переводом, сообразил что можно выделить функцию чтения из табличек, дело пошло бодрее:

    def crypt1 (r2):
        r2 = r2 & 0xFFFFFFFF
        idx_tab1 = r2 & 0xFF
        idx_tab2 = (r2 >> 8) & 0xFF
        idx_tab3 = (r2 >> 16) & 0xFF
        idx_tab4 = (r2 >> 24) & 0xFF
        val_tab1 = read_u32(tab1, idx_tab1 << 2)
        val_tab2 = read_u32(tab2, idx_tab2 << 2)
        val_tab3 = read_u32(tab3, idx_tab3 << 2)
        val_tab4 = read_u32(tab4, idx_tab4 << 2)
        val = val_tab1 ^ val_tab2 ^ val_tab3 ^ val_tab4
        return val

    b0 = stack[0x64 + 0]
    b1 = stack[0x64 + 1]
    b2 = stack[0x64 + 2]
    b3 = stack[0x64 + 3]

    val = crypt1 (b0 + b2 + 0x47 + 0x8600 + 0x1C80000 + 0x60000000)
    write_u32(0x74 +0 , val)
    val = crypt1 (b1 - b3 + 0xB9 - 0x8700 - 0x1C80000 + 0xA0000000)
    write_u32(0x74 +4 , val)
    val = crypt1 ((b1 << 24) + b2 + 0x8D + 0x10C00 + 0x3900000 + 0xC0000000)
    write_u32(0x74 +8 , val)
    val = crypt1 ((b0 <<24) - b3 - 0x8D - 0x10C00 -0x3900000 + 0x40000000)
    write_u32(0x74 +12 , val)
    val = crypt1 ((b2 <<8) + (b1 <<24) +0x8000001A + 0x1900 - 0xDE0000 +0x8000000)
    write_u32(0x74 +16 , val)
    ...

Метод рабочий, но подумав вышло, что так делать не надо. В этом снова помогает эмуляция. Функция за все время вызывается 2 раза, начинает с констант, использует одни таблички. Ставим бряк сразу после нее на 01DBE878, смотрим результат после первого запуска, после второго. Меняем серийник, перезапускаем. Результат одинаковый. Получили еще 1 урок: сначала надо думать, потом делать )

Сохраняем этот блок, data.save.binary …=> HxD => код:


stack = bytes.fromhex("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 DB E8 78 26 8D 66 A7 35 A8 1A 81 6F BA D9 FA 36 16 25 01 D0 73 01 5C 3C 75 4B C2 C1 8C E9 4A B0 D1 0F 3E 66 77 6C A4 F2 B2 13 98 54 B8 D9 E1 F6 6B DA B9 A3 AD BD 1D 9E 01 71 88 D7 E5 4E 81 17 55 68 9A 43 3E 6A C5 E8 F9 02 45 69 B3 F0 E1 DA C4 66 26 51 25 CB 71 67 00 14 9D BE 61 36 3F 1D 4E 08 C4 61 E8 31 C6 21 83 42 9D 4C 42 5E 6F CE DF 8A C0 01 D8 D7 61 DA DC E0 E8 FA F9 5C C0 94 3A CC E4 91 FA 00 C8 7A B8 39 1F 51 CF CC 6C 4C 7E 83 ED 65 43 97 31 9B 48 13 C1 2F A9 69 0A CA 04 F3 50 00 00 00 00 00 00 00 00 02 03 D6 54")
# и всего делов

С новыми знаниями подступаем к последней функции, по сути, как оказалось, единственной в этом алгоритме. Тоже портянка. Таблички пригодилсь, тоже тут есть. Тоже развернутый цикл, но без записи по ходу, собирает, ксорит, в конце блоком пишет.

sub_1DBCEF0
ROM:01DBCEF0 sub_1DBCEF0                             ; CODE XREF: ROM:01DBE6E0p
ROM:01DBCEF0                                         ; ROM:01DBE720p ...
ROM:01DBCEF0                 STMFD   SP!, {R4-R11,LR}
ROM:01DBCEF4                 LDMIB   R0, {R3,R8}
ROM:01DBCEF8                 LDR     R6, [R0,#0xC]
ROM:01DBCEFC                 LDR     R7, [R0]
ROM:01DBCF00                 LDR     R0, [R2]
ROM:01DBCF04                 LDR     R11, =tab1
ROM:01DBCF08                 EOR     R5, R8, R0
ROM:01DBCF0C                 LDR     R0, [R2,#4]
ROM:01DBCF10                 LDR     LR, =tab2
ROM:01DBCF14                 EOR     R0, R0, R6
ROM:01DBCF18                 EOR     R4, R0, R5
ROM:01DBCF1C                 AND     R0, R4, #0xFF
ROM:01DBCF20                 LDR     R12, [R11,R0,LSL#2] ; tab1
ROM:01DBCF24                 MOV     R0, #0xFF
ROM:01DBCF28                 AND     R9, R0, R4,LSR#8
ROM:01DBCF2C                 LDR     R9, [LR,R9,LSL#2] ; tab2
ROM:01DBCF30                 AND     R10, R0, R4,LSR#16
ROM:01DBCF34                 EOR     R9, R12, R9
ROM:01DBCF38                 LDR     R12, =tab3
ROM:01DBCF3C                 MOV     R4, R4,LSR#24
ROM:01DBCF40                 LDR     R10, [R12,R10,LSL#2] ; tab3
ROM:01DBCF44                 EOR     R9, R9, R10
ROM:01DBCF48                 LDR     R10, =tab4
ROM:01DBCF4C                 LDR     R4, [R10,R4,LSL#2] ; tab4
ROM:01DBCF50                 EOR     R4, R9, R4
ROM:01DBCF54                 ADD     R5, R5, R4		; R5 тут - результат блока, он переиспользуется в следующем
ROM:01DBCF58                 AND     R9, R5, #0xFF 	; буду ставить бряк на AND-ах, сверяться 
ROM:01DBCF5C                 AND     R10, R0, R5,LSR#8
ROM:01DBCF60                 LDR     R10, [LR,R10,LSL#2] ; tab2
ROM:01DBCF64                 LDR     R9, [R11,R9,LSL#2] ; tab1
ROM:01DBCF68                 EOR     R10, R9, R10
ROM:01DBCF6C                 AND     R9, R0, R5,LSR#16
ROM:01DBCF70                 LDR     R9, [R12,R9,LSL#2] ; tab3
ROM:01DBCF74                 MOV     R5, R5,LSR#24
ROM:01DBCF78                 EOR     R9, R10, R9
ROM:01DBCF7C                 LDR     R10, =tab4
ROM:01DBCF80                 LDR     R5, [R10,R5,LSL#2]
ROM:01DBCF84                 EOR     R5, R9, R5
ROM:01DBCF88                 ADD     R4, R4, R5		; Тут результат в R4
ROM:01DBCF8C                 AND     R9, R4, #0xFF	; бряк
ROM:01DBCF90                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBCF94                 AND     R9, R0, R4,LSR#8
ROM:01DBCF98                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBCF9C                 EOR     R9, R10, R9
ROM:01DBCFA0                 AND     R10, R0, R4,LSR#16
ROM:01DBCFA4                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBCFA8                 MOV     R4, R4,LSR#24
ROM:01DBCFAC                 EOR     R9, R9, R10
ROM:01DBCFB0                 LDR     R10, =tab4
ROM:01DBCFB4                 LDR     R4, [R10,R4,LSL#2]
ROM:01DBCFB8                 EOR     R4, R9, R4
ROM:01DBCFBC                 ADD     R5, R5, R4
ROM:01DBCFC0                 EOR     R3, R3, R4
ROM:01DBCFC4                 LDR     R4, [R2,#8]
ROM:01DBCFC8                 EOR     R7, R7, R5
ROM:01DBCFCC                 EOR     R5, R4, R7
ROM:01DBCFD0                 LDR     R4, [R2,#0xC]
ROM:01DBCFD4                 EOR     R4, R4, R3
ROM:01DBCFD8                 EOR     R4, R4, R5
ROM:01DBCFDC                 AND     R9, R4, #0xFF		; бряк
ROM:01DBCFE0                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBCFE4                 AND     R9, R0, R4,LSR#8
ROM:01DBCFE8                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBCFEC                 EOR     R9, R10, R9
ROM:01DBCFF0                 AND     R10, R0, R4,LSR#16
ROM:01DBCFF4                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBCFF8                 MOV     R4, R4,LSR#24
ROM:01DBCFFC                 EOR     R9, R9, R10
ROM:01DBD000                 LDR     R10, =tab4
ROM:01DBD004                 LDR     R4, [R10,R4,LSL#2]
ROM:01DBD008                 EOR     R4, R9, R4
ROM:01DBD00C                 ADD     R5, R5, R4
ROM:01DBD010                 AND     R9, R5, #0xFF
ROM:01DBD014                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD018                 AND     R9, R0, R5,LSR#8
ROM:01DBD01C                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD020                 EOR     R9, R10, R9
ROM:01DBD024                 AND     R10, R0, R5,LSR#16
ROM:01DBD028                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD02C                 MOV     R5, R5,LSR#24
ROM:01DBD030                 EOR     R9, R9, R10
ROM:01DBD034                 LDR     R10, =tab4
ROM:01DBD038                 LDR     R5, [R10,R5,LSL#2]
ROM:01DBD03C                 EOR     R5, R9, R5
ROM:01DBD040                 ADD     R4, R4, R5
ROM:01DBD044                 AND     R9, R4, #0xFF		; бряк
ROM:01DBD048                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD04C                 AND     R9, R0, R4,LSR#8
ROM:01DBD050                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD054                 EOR     R10, R10, R9
ROM:01DBD058                 AND     R9, R0, R4,LSR#16
ROM:01DBD05C                 LDR     R9, [R12,R9,LSL#2]
ROM:01DBD060                 MOV     R4, R4,LSR#24
ROM:01DBD064                 EOR     R9, R10, R9
ROM:01DBD068                 LDR     R10, =tab4
ROM:01DBD06C                 LDR     R4, [R10,R4,LSL#2]
ROM:01DBD070                 EOR     R4, R9, R4
ROM:01DBD074                 ADD     R5, R5, R4
ROM:01DBD078                 EOR     R8, R8, R5
ROM:01DBD07C                 EOR     R5, R6, R4
ROM:01DBD080                 LDR     R4, [R2,#0x10]
ROM:01DBD084                 EOR     R6, R4, R8
ROM:01DBD088                 LDR     R4, [R2,#0x14]
ROM:01DBD08C                 EOR     R4, R4, R5
ROM:01DBD090                 EOR     R4, R4, R6
ROM:01DBD094                 AND     R9, R4, #0xFF		; бряк
ROM:01DBD098                 AND     R10, R0, R4,LSR#8
ROM:01DBD09C                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD0A0                 LDR     R9, [R11,R9,LSL#2]
ROM:01DBD0A4                 EOR     R10, R9, R10
ROM:01DBD0A8                 AND     R9, R0, R4,LSR#16
ROM:01DBD0AC                 LDR     R9, [R12,R9,LSL#2]
ROM:01DBD0B0                 MOV     R4, R4,LSR#24
ROM:01DBD0B4                 EOR     R9, R10, R9
ROM:01DBD0B8                 LDR     R10, =tab4
ROM:01DBD0BC                 LDR     R4, [R10,R4,LSL#2]
ROM:01DBD0C0                 EOR     R4, R9, R4
ROM:01DBD0C4                 ADD     R6, R6, R4
ROM:01DBD0C8                 AND     R9, R6, #0xFF		; бряк
ROM:01DBD0CC                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD0D0                 AND     R9, R0, R6,LSR#8
ROM:01DBD0D4                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD0D8                 EOR     R9, R10, R9
ROM:01DBD0DC                 AND     R10, R0, R6,LSR#16
ROM:01DBD0E0                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD0E4                 MOV     R6, R6,LSR#24
ROM:01DBD0E8                 EOR     R9, R9, R10
ROM:01DBD0EC                 LDR     R10, =tab4
ROM:01DBD0F0                 LDR     R6, [R10,R6,LSL#2]
ROM:01DBD0F4                 EOR     R6, R9, R6
ROM:01DBD0F8                 ADD     R4, R4, R6
ROM:01DBD0FC                 AND     R9, R4, #0xFF
ROM:01DBD100                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD104                 AND     R9, R0, R4,LSR#8
ROM:01DBD108                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD10C                 EOR     R9, R10, R9
ROM:01DBD110                 AND     R10, R0, R4,LSR#16
ROM:01DBD114                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD118                 MOV     R4, R4,LSR#24
ROM:01DBD11C                 EOR     R9, R9, R10
ROM:01DBD120                 LDR     R10, =tab4
ROM:01DBD124                 LDR     R4, [R10,R4,LSL#2]
ROM:01DBD128                 EOR     R4, R9, R4
ROM:01DBD12C                 ADD     R6, R6, R4
ROM:01DBD130                 EOR     R4, R3, R4
ROM:01DBD134                 LDR     R3, [R2,#0x18]
ROM:01DBD138                 EOR     R6, R7, R6
ROM:01DBD13C                 EOR     R7, R3, R6
ROM:01DBD140                 LDR     R3, [R2,#0x1C]
ROM:01DBD144                 EOR     R3, R3, R4
ROM:01DBD148                 EOR     R3, R3, R7
ROM:01DBD14C                 AND     R9, R3, #0xFF
ROM:01DBD150                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD154                 AND     R9, R0, R3,LSR#8
ROM:01DBD158                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD15C                 EOR     R10, R10, R9
ROM:01DBD160                 AND     R9, R0, R3,LSR#16
ROM:01DBD164                 LDR     R9, [R12,R9,LSL#2]
ROM:01DBD168                 MOV     R3, R3,LSR#24
ROM:01DBD16C                 EOR     R9, R10, R9
ROM:01DBD170                 LDR     R10, =tab4
ROM:01DBD174                 LDR     R3, [R10,R3,LSL#2]
ROM:01DBD178                 EOR     R3, R9, R3
ROM:01DBD17C                 ADD     R7, R7, R3
ROM:01DBD180                 AND     R9, R7, #0xFF
ROM:01DBD184                 AND     R10, R0, R7,LSR#8
ROM:01DBD188                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD18C                 LDR     R9, [R11,R9,LSL#2]
ROM:01DBD190                 EOR     R10, R9, R10
ROM:01DBD194                 AND     R9, R0, R7,LSR#16
ROM:01DBD198                 LDR     R9, [R12,R9,LSL#2]
ROM:01DBD19C                 MOV     R7, R7,LSR#24
ROM:01DBD1A0                 EOR     R9, R10, R9
ROM:01DBD1A4                 LDR     R10, =tab4
ROM:01DBD1A8                 LDR     R7, [R10,R7,LSL#2]
ROM:01DBD1AC                 EOR     R7, R9, R7
ROM:01DBD1B0                 ADD     R3, R3, R7
ROM:01DBD1B4                 AND     R9, R3, #0xFF
ROM:01DBD1B8                 LDR     R10, [R11,R9,LSL#2]
ROM:01DBD1BC                 AND     R9, R0, R3,LSR#8
ROM:01DBD1C0                 LDR     R9, [LR,R9,LSL#2]
ROM:01DBD1C4                 EOR     R10, R10, R9
ROM:01DBD1C8                 AND     R9, R0, R3,LSR#16
ROM:01DBD1CC                 LDR     R9, [R12,R9,LSL#2]
ROM:01DBD1D0                 MOV     R3, R3,LSR#24
ROM:01DBD1D4                 EOR     R9, R10, R9
ROM:01DBD1D8                 LDR     R10, =tab4
ROM:01DBD1DC                 LDR     R3, [R10,R3,LSL#2]
ROM:01DBD1E0                 EOR     R3, R9, R3
ROM:01DBD1E4                 ADD     R7, R7, R3
ROM:01DBD1E8                 EOR     R9, R8, R7
ROM:01DBD1EC                 EOR     R7, R5, R3
ROM:01DBD1F0                 LDR     R3, [R2,#0x20]
ROM:01DBD1F4                 EOR     R5, R3, R9
ROM:01DBD1F8                 LDR     R3, [R2,#0x24]
ROM:01DBD1FC                 EOR     R3, R3, R7
ROM:01DBD200                 EOR     R3, R3, R5      ; +++
ROM:01DBD204                 AND     R8, R3, #0xFF
ROM:01DBD208                 LDR     R8, [R11,R8,LSL#2]
ROM:01DBD20C                 AND     R10, R0, R3,LSR#8
ROM:01DBD210                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD214                 EOR     R8, R8, R10
ROM:01DBD218                 AND     R10, R0, R3,LSR#16
ROM:01DBD21C                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD220                 MOV     R3, R3,LSR#24
ROM:01DBD224                 EOR     R8, R8, R10
ROM:01DBD228                 LDR     R10, =tab4
ROM:01DBD22C                 LDR     R3, [R10,R3,LSL#2]
ROM:01DBD230                 EOR     R3, R8, R3
ROM:01DBD234                 ADD     R5, R5, R3
ROM:01DBD238                 AND     R8, R5, #0xFF
ROM:01DBD23C                 AND     R10, R0, R5,LSR#8
ROM:01DBD240                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD244                 LDR     R8, [R11,R8,LSL#2]
ROM:01DBD248                 EOR     R8, R8, R10
ROM:01DBD24C                 AND     R10, R0, R5,LSR#16
ROM:01DBD250                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD254                 MOV     R5, R5,LSR#24
ROM:01DBD258                 EOR     R8, R8, R10
ROM:01DBD25C                 LDR     R10, =tab4
ROM:01DBD260                 LDR     R5, [R10,R5,LSL#2]
ROM:01DBD264                 MOV     R10, #0xFF
ROM:01DBD268                 EOR     R5, R8, R5
ROM:01DBD26C                 ADD     R8, R3, R5
ROM:01DBD270                 AND     R3, R8, #0xFF
ROM:01DBD274                 AND     R10, R10, R8,LSR#8
ROM:01DBD278                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD27C                 LDR     R3, [R11,R3,LSL#2]
ROM:01DBD280                 LDR     R11, =tab1
ROM:01DBD284                 EOR     R3, R3, R10
ROM:01DBD288                 AND     R10, R0, R8,LSR#16
ROM:01DBD28C                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD290                 MOV     R8, R8,LSR#24
ROM:01DBD294                 EOR     R10, R3, R10
ROM:01DBD298                 LDR     R3, =tab4
ROM:01DBD29C                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD2A0                 EOR     R10, R10, R8
ROM:01DBD2A4                 ADD     R5, R5, R10
ROM:01DBD2A8                 EOR     R8, R6, R5
ROM:01DBD2AC                 LDR     R5, [R2,#0x28]
ROM:01DBD2B0                 EOR     R4, R4, R10
ROM:01DBD2B4                 EOR     R6, R5, R8
ROM:01DBD2B8                 LDR     R5, [R2,#0x2C]
ROM:01DBD2BC                 EOR     R5, R5, R4
ROM:01DBD2C0                 EOR     R5, R5, R6
ROM:01DBD2C4                 AND     R10, R5, #0xFF
ROM:01DBD2C8                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD2CC                 AND     R10, R0, R5,LSR#8
ROM:01DBD2D0                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD2D4                 EOR     R10, R11, R10
ROM:01DBD2D8                 AND     R11, R0, R5,LSR#16
ROM:01DBD2DC                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD2E0                 MOV     R5, R5,LSR#24
ROM:01DBD2E4                 LDR     R5, [R3,R5,LSL#2]
ROM:01DBD2E8                 EOR     R10, R10, R11
ROM:01DBD2EC                 EOR     R5, R10, R5
ROM:01DBD2F0                 ADD     R6, R6, R5
ROM:01DBD2F4                 LDR     R11, =tab1
ROM:01DBD2F8                 AND     R10, R6, #0xFF
ROM:01DBD2FC                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD300                 AND     R10, R0, R6,LSR#8
ROM:01DBD304                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD308                 EOR     R11, R11, R10
ROM:01DBD30C                 AND     R10, R0, R6,LSR#16
ROM:01DBD310                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD314                 MOV     R6, R6,LSR#24
ROM:01DBD318                 LDR     R6, [R3,R6,LSL#2]
ROM:01DBD31C                 EOR     R10, R11, R10
ROM:01DBD320                 EOR     R6, R10, R6
ROM:01DBD324                 ADD     R5, R5, R6
ROM:01DBD328                 LDR     R11, =tab1
ROM:01DBD32C                 AND     R10, R5, #0xFF
ROM:01DBD330                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD334                 AND     R11, R0, R5,LSR#8
ROM:01DBD338                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD33C                 EOR     R10, R10, R11
ROM:01DBD340                 AND     R11, R0, R5,LSR#16
ROM:01DBD344                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD348                 MOV     R5, R5,LSR#24
ROM:01DBD34C                 LDR     R5, [R3,R5,LSL#2]
ROM:01DBD350                 EOR     R10, R10, R11
ROM:01DBD354                 EOR     R5, R10, R5
ROM:01DBD358                 ADD     R6, R6, R5
ROM:01DBD35C                 EOR     R9, R9, R6
ROM:01DBD360                 LDR     R6, [R2,#0x30]
ROM:01DBD364                 EOR     R5, R7, R5
ROM:01DBD368                 EOR     R7, R6, R9
ROM:01DBD36C                 LDR     R6, [R2,#0x34]
ROM:01DBD370                 LDR     R11, =tab1
ROM:01DBD374                 EOR     R6, R6, R5
ROM:01DBD378                 EOR     R6, R6, R7
ROM:01DBD37C                 AND     R10, R6, #0xFF
ROM:01DBD380                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD384                 AND     R10, R0, R6,LSR#8
ROM:01DBD388                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD38C                 EOR     R11, R11, R10
ROM:01DBD390                 AND     R10, R0, R6,LSR#16
ROM:01DBD394                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD398                 MOV     R6, R6,LSR#24
ROM:01DBD39C                 LDR     R6, [R3,R6,LSL#2]
ROM:01DBD3A0                 EOR     R10, R11, R10
ROM:01DBD3A4                 EOR     R6, R10, R6
ROM:01DBD3A8                 ADD     R7, R7, R6
ROM:01DBD3AC                 LDR     R11, =tab1
ROM:01DBD3B0                 AND     R10, R7, #0xFF
ROM:01DBD3B4                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD3B8                 AND     R11, R0, R7,LSR#8
ROM:01DBD3BC                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD3C0                 EOR     R11, R10, R11
ROM:01DBD3C4                 AND     R10, R0, R7,LSR#16
ROM:01DBD3C8                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD3CC                 MOV     R7, R7,LSR#24
ROM:01DBD3D0                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD3D4                 EOR     R10, R11, R10
ROM:01DBD3D8                 EOR     R7, R10, R7
ROM:01DBD3DC                 ADD     R6, R6, R7
ROM:01DBD3E0                 LDR     R11, =tab1
ROM:01DBD3E4                 AND     R10, R6, #0xFF
ROM:01DBD3E8                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD3EC                 AND     R11, R0, R6,LSR#8
ROM:01DBD3F0                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD3F4                 EOR     R11, R10, R11
ROM:01DBD3F8                 AND     R10, R0, R6,LSR#16
ROM:01DBD3FC                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD400                 MOV     R6, R6,LSR#24
ROM:01DBD404                 LDR     R6, [R3,R6,LSL#2]
ROM:01DBD408                 EOR     R10, R11, R10
ROM:01DBD40C                 EOR     R6, R10, R6
ROM:01DBD410                 ADD     R7, R7, R6
ROM:01DBD414                 EOR     R6, R4, R6
ROM:01DBD418                 LDR     R4, [R2,#0x38]
ROM:01DBD41C                 EOR     R7, R8, R7
ROM:01DBD420                 EOR     R8, R4, R7
ROM:01DBD424                 LDR     R4, [R2,#0x3C]
ROM:01DBD428                 LDR     R11, =tab1
ROM:01DBD42C                 EOR     R4, R4, R6
ROM:01DBD430                 EOR     R4, R4, R8
ROM:01DBD434                 AND     R10, R4, #0xFF
ROM:01DBD438                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD43C                 AND     R10, R0, R4,LSR#8
ROM:01DBD440                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD444                 EOR     R11, R11, R10
ROM:01DBD448                 AND     R10, R0, R4,LSR#16
ROM:01DBD44C                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD450                 MOV     R4, R4,LSR#24
ROM:01DBD454                 LDR     R4, [R3,R4,LSL#2]
ROM:01DBD458                 EOR     R10, R11, R10
ROM:01DBD45C                 EOR     R4, R10, R4
ROM:01DBD460                 ADD     R8, R8, R4
ROM:01DBD464                 LDR     R11, =tab1
ROM:01DBD468                 AND     R10, R8, #0xFF
ROM:01DBD46C                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD470                 AND     R10, R0, R8,LSR#8
ROM:01DBD474                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD478                 EOR     R11, R11, R10
ROM:01DBD47C                 AND     R10, R0, R8,LSR#16
ROM:01DBD480                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD484                 MOV     R8, R8,LSR#24
ROM:01DBD488                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD48C                 EOR     R10, R11, R10
ROM:01DBD490                 EOR     R8, R10, R8
ROM:01DBD494                 ADD     R4, R4, R8
ROM:01DBD498                 LDR     R11, =tab1
ROM:01DBD49C                 AND     R10, R4, #0xFF
ROM:01DBD4A0                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD4A4                 AND     R10, R0, R4,LSR#8
ROM:01DBD4A8                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD4AC                 EOR     R11, R11, R10
ROM:01DBD4B0                 AND     R10, R0, R4,LSR#16
ROM:01DBD4B4                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD4B8                 MOV     R4, R4,LSR#24
ROM:01DBD4BC                 LDR     R4, [R3,R4,LSL#2]
ROM:01DBD4C0                 EOR     R10, R11, R10
ROM:01DBD4C4                 EOR     R4, R10, R4
ROM:01DBD4C8                 ADD     R8, R8, R4
ROM:01DBD4CC                 EOR     R8, R9, R8
ROM:01DBD4D0                 EOR     R5, R5, R4
ROM:01DBD4D4                 LDR     R4, [R2,#0x40]
ROM:01DBD4D8                 LDR     R9, [R2,#0x44]
ROM:01DBD4DC                 EOR     R4, R4, R8
ROM:01DBD4E0                 EOR     R9, R9, R5
ROM:01DBD4E4                 EOR     R9, R9, R4
ROM:01DBD4E8                 LDR     R11, =tab1
ROM:01DBD4EC                 AND     R10, R9, #0xFF
ROM:01DBD4F0                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD4F4                 AND     R10, R0, R9,LSR#8
ROM:01DBD4F8                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD4FC                 EOR     R10, R11, R10
ROM:01DBD500                 AND     R11, R0, R9,LSR#16
ROM:01DBD504                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD508                 MOV     R9, R9,LSR#24
ROM:01DBD50C                 LDR     R9, [R3,R9,LSL#2]
ROM:01DBD510                 EOR     R10, R10, R11
ROM:01DBD514                 EOR     R9, R10, R9
ROM:01DBD518                 ADD     R4, R4, R9
ROM:01DBD51C                 LDR     R11, =tab1
ROM:01DBD520                 AND     R10, R4, #0xFF
ROM:01DBD524                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD528                 AND     R10, R0, R4,LSR#8
ROM:01DBD52C                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD530                 EOR     R11, R11, R10
ROM:01DBD534                 AND     R10, R0, R4,LSR#16
ROM:01DBD538                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD53C                 MOV     R4, R4,LSR#24
ROM:01DBD540                 LDR     R4, [R3,R4,LSL#2]
ROM:01DBD544                 EOR     R10, R11, R10
ROM:01DBD548                 EOR     R4, R10, R4
ROM:01DBD54C                 ADD     R9, R9, R4
ROM:01DBD550                 LDR     R11, =tab1
ROM:01DBD554                 AND     R10, R9, #0xFF
ROM:01DBD558                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD55C                 AND     R10, R0, R9,LSR#8
ROM:01DBD560                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD564                 EOR     R10, R11, R10
ROM:01DBD568                 AND     R11, R0, R9,LSR#16
ROM:01DBD56C                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD570                 MOV     R9, R9,LSR#24
ROM:01DBD574                 LDR     R9, [R3,R9,LSL#2]
ROM:01DBD578                 EOR     R10, R10, R11
ROM:01DBD57C                 EOR     R9, R10, R9
ROM:01DBD580                 ADD     R4, R4, R9
ROM:01DBD584                 EOR     R4, R7, R4
ROM:01DBD588                 LDR     R7, [R2,#0x48]
ROM:01DBD58C                 EOR     R6, R6, R9
ROM:01DBD590                 EOR     R9, R7, R4
ROM:01DBD594                 LDR     R7, [R2,#0x4C]
ROM:01DBD598                 LDR     R11, =tab1
ROM:01DBD59C                 EOR     R7, R7, R6
ROM:01DBD5A0                 EOR     R7, R7, R9
ROM:01DBD5A4                 AND     R10, R7, #0xFF
ROM:01DBD5A8                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD5AC                 AND     R10, R0, R7,LSR#8
ROM:01DBD5B0                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD5B4                 EOR     R11, R11, R10
ROM:01DBD5B8                 AND     R10, R0, R7,LSR#16
ROM:01DBD5BC                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD5C0                 MOV     R7, R7,LSR#24
ROM:01DBD5C4                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD5C8                 EOR     R10, R11, R10
ROM:01DBD5CC                 EOR     R7, R10, R7
ROM:01DBD5D0                 ADD     R9, R9, R7
ROM:01DBD5D4                 LDR     R11, =tab1
ROM:01DBD5D8                 AND     R10, R9, #0xFF
ROM:01DBD5DC                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD5E0                 AND     R10, R0, R9,LSR#8
ROM:01DBD5E4                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD5E8                 EOR     R10, R11, R10
ROM:01DBD5EC                 AND     R11, R0, R9,LSR#16
ROM:01DBD5F0                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD5F4                 MOV     R9, R9,LSR#24
ROM:01DBD5F8                 LDR     R9, [R3,R9,LSL#2]
ROM:01DBD5FC                 EOR     R10, R10, R11
ROM:01DBD600                 EOR     R9, R10, R9
ROM:01DBD604                 ADD     R7, R7, R9
ROM:01DBD608                 LDR     R11, =tab1
ROM:01DBD60C                 AND     R10, R7, #0xFF
ROM:01DBD610                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD614                 AND     R11, R0, R7,LSR#8
ROM:01DBD618                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD61C                 EOR     R11, R10, R11
ROM:01DBD620                 AND     R10, R0, R7,LSR#16
ROM:01DBD624                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD628                 MOV     R7, R7,LSR#24
ROM:01DBD62C                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD630                 EOR     R10, R11, R10
ROM:01DBD634                 EOR     R10, R10, R7
ROM:01DBD638                 ADD     R7, R9, R10
ROM:01DBD63C                 EOR     R7, R8, R7
ROM:01DBD640                 LDR     R8, [R2,#0x50]
ROM:01DBD644                 LDR     R9, [R2,#0x54]
ROM:01DBD648                 EOR     R5, R5, R10
ROM:01DBD64C                 EOR     R9, R9, R5
ROM:01DBD650                 EOR     R8, R8, R7
ROM:01DBD654                 EOR     R9, R9, R8
ROM:01DBD658                 LDR     R11, =tab1
ROM:01DBD65C                 AND     R10, R9, #0xFF
ROM:01DBD660                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD664                 AND     R10, R0, R9,LSR#8
ROM:01DBD668                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD66C                 EOR     R10, R11, R10
ROM:01DBD670                 AND     R11, R0, R9,LSR#16
ROM:01DBD674                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD678                 MOV     R9, R9,LSR#24
ROM:01DBD67C                 LDR     R9, [R3,R9,LSL#2]
ROM:01DBD680                 EOR     R10, R10, R11
ROM:01DBD684                 EOR     R9, R10, R9
ROM:01DBD688                 ADD     R8, R8, R9
ROM:01DBD68C                 LDR     R11, =tab1
ROM:01DBD690                 AND     R10, R8, #0xFF
ROM:01DBD694                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD698                 AND     R11, R0, R8,LSR#8
ROM:01DBD69C                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD6A0                 EOR     R11, R10, R11
ROM:01DBD6A4                 AND     R10, R0, R8,LSR#16
ROM:01DBD6A8                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD6AC                 MOV     R8, R8,LSR#24
ROM:01DBD6B0                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD6B4                 EOR     R10, R11, R10
ROM:01DBD6B8                 EOR     R8, R10, R8
ROM:01DBD6BC                 ADD     R9, R9, R8
ROM:01DBD6C0                 LDR     R11, =tab1
ROM:01DBD6C4                 AND     R10, R9, #0xFF
ROM:01DBD6C8                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD6CC                 AND     R10, R0, R9,LSR#8
ROM:01DBD6D0                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD6D4                 EOR     R10, R11, R10
ROM:01DBD6D8                 AND     R11, R0, R9,LSR#16
ROM:01DBD6DC                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD6E0                 MOV     R9, R9,LSR#24
ROM:01DBD6E4                 LDR     R9, [R3,R9,LSL#2]
ROM:01DBD6E8                 EOR     R10, R10, R11
ROM:01DBD6EC                 EOR     R9, R10, R9
ROM:01DBD6F0                 ADD     R8, R8, R9
ROM:01DBD6F4                 EOR     R4, R4, R8
ROM:01DBD6F8                 EOR     R9, R6, R9
ROM:01DBD6FC                 LDR     R6, [R2,#0x58]
ROM:01DBD700                 LDR     R8, [R2,#0x5C]
ROM:01DBD704                 EOR     R6, R6, R4
ROM:01DBD708                 EOR     R8, R8, R9
ROM:01DBD70C                 EOR     R8, R8, R6
ROM:01DBD710                 LDR     R11, =tab1
ROM:01DBD714                 AND     R10, R8, #0xFF
ROM:01DBD718                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD71C                 AND     R10, R0, R8,LSR#8
ROM:01DBD720                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD724                 EOR     R10, R11, R10
ROM:01DBD728                 AND     R11, R0, R8,LSR#16
ROM:01DBD72C                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD730                 MOV     R8, R8,LSR#24
ROM:01DBD734                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD738                 EOR     R10, R10, R11
ROM:01DBD73C                 EOR     R8, R10, R8
ROM:01DBD740                 ADD     R6, R6, R8
ROM:01DBD744                 LDR     R11, =tab1
ROM:01DBD748                 AND     R10, R6, #0xFF
ROM:01DBD74C                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD750                 AND     R10, R0, R6,LSR#8
ROM:01DBD754                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD758                 EOR     R11, R11, R10
ROM:01DBD75C                 AND     R10, R0, R6,LSR#16
ROM:01DBD760                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD764                 MOV     R6, R6,LSR#24
ROM:01DBD768                 LDR     R6, [R3,R6,LSL#2]
ROM:01DBD76C                 EOR     R10, R11, R10
ROM:01DBD770                 EOR     R6, R10, R6
ROM:01DBD774                 ADD     R8, R8, R6
ROM:01DBD778                 LDR     R11, =tab1
ROM:01DBD77C                 AND     R10, R8, #0xFF
ROM:01DBD780                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD784                 AND     R11, R0, R8,LSR#8
ROM:01DBD788                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD78C                 EOR     R10, R10, R11
ROM:01DBD790                 AND     R11, R0, R8,LSR#16
ROM:01DBD794                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD798                 MOV     R8, R8,LSR#24
ROM:01DBD79C                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD7A0                 EOR     R10, R10, R11
ROM:01DBD7A4                 EOR     R8, R10, R8
ROM:01DBD7A8                 ADD     R6, R6, R8
ROM:01DBD7AC                 EOR     R6, R7, R6
ROM:01DBD7B0                 EOR     R5, R5, R8
ROM:01DBD7B4                 LDR     R8, [R2,#0x64]
ROM:01DBD7B8                 LDR     R7, [R2,#0x60]
ROM:01DBD7BC                 EOR     R8, R8, R5
ROM:01DBD7C0                 EOR     R7, R7, R6
ROM:01DBD7C4                 EOR     R8, R8, R7
ROM:01DBD7C8                 LDR     R11, =tab1
ROM:01DBD7CC                 AND     R10, R8, #0xFF
ROM:01DBD7D0                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD7D4                 AND     R10, R0, R8,LSR#8
ROM:01DBD7D8                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD7DC                 EOR     R11, R11, R10
ROM:01DBD7E0                 AND     R10, R0, R8,LSR#16
ROM:01DBD7E4                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD7E8                 MOV     R8, R8,LSR#24
ROM:01DBD7EC                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD7F0                 EOR     R10, R11, R10
ROM:01DBD7F4                 EOR     R8, R10, R8
ROM:01DBD7F8                 ADD     R7, R7, R8
ROM:01DBD7FC                 LDR     R11, =tab1
ROM:01DBD800                 AND     R10, R7, #0xFF
ROM:01DBD804                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD808                 AND     R11, R0, R7,LSR#8
ROM:01DBD80C                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD810                 EOR     R11, R10, R11
ROM:01DBD814                 AND     R10, R0, R7,LSR#16
ROM:01DBD818                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD81C                 MOV     R7, R7,LSR#24
ROM:01DBD820                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD824                 EOR     R10, R11, R10
ROM:01DBD828                 EOR     R7, R10, R7
ROM:01DBD82C                 ADD     R8, R8, R7
ROM:01DBD830                 LDR     R11, =tab1
ROM:01DBD834                 AND     R10, R8, #0xFF
ROM:01DBD838                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD83C                 AND     R10, R0, R8,LSR#8
ROM:01DBD840                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD844                 EOR     R11, R11, R10
ROM:01DBD848                 AND     R10, R0, R8,LSR#16
ROM:01DBD84C                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD850                 EOR     R10, R11, R10
ROM:01DBD854                 MOV     R8, R8,LSR#24
ROM:01DBD858                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD85C                 LDR     R11, =tab1
ROM:01DBD860                 EOR     R8, R10, R8
ROM:01DBD864                 ADD     R7, R7, R8
ROM:01DBD868                 EOR     R4, R4, R7
ROM:01DBD86C                 LDR     R7, [R2,#0x68]
ROM:01DBD870                 EOR     R9, R9, R8
ROM:01DBD874                 EOR     R8, R7, R4
ROM:01DBD878                 LDR     R7, [R2,#0x6C]
ROM:01DBD87C                 EOR     R7, R7, R9
ROM:01DBD880                 EOR     R7, R7, R8
ROM:01DBD884                 AND     R10, R7, #0xFF
ROM:01DBD888                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD88C                 AND     R11, R0, R7,LSR#8
ROM:01DBD890                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD894                 EOR     R11, R10, R11
ROM:01DBD898                 AND     R10, R0, R7,LSR#16
ROM:01DBD89C                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD8A0                 MOV     R7, R7,LSR#24
ROM:01DBD8A4                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD8A8                 EOR     R10, R11, R10
ROM:01DBD8AC                 EOR     R7, R10, R7
ROM:01DBD8B0                 ADD     R8, R8, R7
ROM:01DBD8B4                 LDR     R11, =tab1
ROM:01DBD8B8                 AND     R10, R8, #0xFF
ROM:01DBD8BC                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD8C0                 AND     R10, R0, R8,LSR#8
ROM:01DBD8C4                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD8C8                 EOR     R11, R11, R10
ROM:01DBD8CC                 AND     R10, R0, R8,LSR#16
ROM:01DBD8D0                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD8D4                 MOV     R8, R8,LSR#24
ROM:01DBD8D8                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD8DC                 EOR     R10, R11, R10
ROM:01DBD8E0                 EOR     R8, R10, R8
ROM:01DBD8E4                 ADD     R7, R7, R8
ROM:01DBD8E8                 LDR     R11, =tab1
ROM:01DBD8EC                 AND     R10, R7, #0xFF
ROM:01DBD8F0                 LDR     R10, [R11,R10,LSL#2]
ROM:01DBD8F4                 AND     R11, R0, R7,LSR#8
ROM:01DBD8F8                 LDR     R11, [LR,R11,LSL#2]
ROM:01DBD8FC                 EOR     R11, R10, R11
ROM:01DBD900                 AND     R10, R0, R7,LSR#16
ROM:01DBD904                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD908                 MOV     R7, R7,LSR#24
ROM:01DBD90C                 LDR     R7, [R3,R7,LSL#2]
ROM:01DBD910                 EOR     R10, R11, R10
ROM:01DBD914                 EOR     R10, R10, R7
ROM:01DBD918                 ADD     R7, R8, R10
ROM:01DBD91C                 EOR     R7, R6, R7
ROM:01DBD920                 EOR     R6, R5, R10
ROM:01DBD924                 LDR     R5, [R2,#0x70]
ROM:01DBD928                 LDR     R11, =tab1
ROM:01DBD92C                 EOR     R8, R5, R7
ROM:01DBD930                 LDR     R5, [R2,#0x74]
ROM:01DBD934                 EOR     R5, R5, R6
ROM:01DBD938                 EOR     R5, R5, R8
ROM:01DBD93C                 AND     R10, R5, #0xFF
ROM:01DBD940                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD944                 AND     R10, R0, R5,LSR#8
ROM:01DBD948                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD94C                 EOR     R11, R11, R10
ROM:01DBD950                 AND     R10, R0, R5,LSR#16
ROM:01DBD954                 LDR     R10, [R12,R10,LSL#2]
ROM:01DBD958                 MOV     R5, R5,LSR#24
ROM:01DBD95C                 LDR     R5, [R3,R5,LSL#2]
ROM:01DBD960                 EOR     R10, R11, R10
ROM:01DBD964                 EOR     R5, R10, R5
ROM:01DBD968                 ADD     R8, R8, R5
ROM:01DBD96C                 LDR     R11, =tab1
ROM:01DBD970                 AND     R10, R8, #0xFF
ROM:01DBD974                 LDR     R11, [R11,R10,LSL#2]
ROM:01DBD978                 AND     R10, R0, R8,LSR#8
ROM:01DBD97C                 LDR     R10, [LR,R10,LSL#2]
ROM:01DBD980                 EOR     R10, R11, R10
ROM:01DBD984                 AND     R11, R0, R8,LSR#16
ROM:01DBD988                 LDR     R11, [R12,R11,LSL#2]
ROM:01DBD98C                 MOV     R8, R8,LSR#24
ROM:01DBD990                 LDR     R8, [R3,R8,LSL#2]
ROM:01DBD994                 EOR     R10, R10, R11
ROM:01DBD998                 EOR     R8, R10, R8
ROM:01DBD99C                 ADD     R5, R5, R8
ROM:01DBD9A0                 LDR     R10, =tab1
ROM:01DBD9A4                 MOV     R0, #0xFF
ROM:01DBD9A8                 AND     R0, R0, R5,LSR#8
ROM:01DBD9AC                 AND     R11, R5, #0xFF
ROM:01DBD9B0                 LDR     R11, [R10,R11,LSL#2]
ROM:01DBD9B4                 LDR     R0, [LR,R0,LSL#2]
ROM:01DBD9B8                 EOR     R11, R11, R0
ROM:01DBD9BC                 MOV     R0, #0xFF
ROM:01DBD9C0                 AND     R0, R0, R5,LSR#16
ROM:01DBD9C4                 LDR     R0, [R12,R0,LSL#2]
ROM:01DBD9C8                 MOV     R5, R5,LSR#24
ROM:01DBD9CC                 LDR     R5, [R3,R5,LSL#2]
ROM:01DBD9D0                 EOR     R0, R11, R0
ROM:01DBD9D4                 EOR     R0, R0, R5
ROM:01DBD9D8                 ADD     R5, R8, R0
ROM:01DBD9DC                 EOR     R4, R4, R5
ROM:01DBD9E0                 LDR     R5, [R2,#0x78]
ROM:01DBD9E4                 LDR     R2, [R2,#0x7C]
ROM:01DBD9E8                 EOR     R0, R9, R0
ROM:01DBD9EC                 EOR     R2, R2, R0
ROM:01DBD9F0                 EOR     R8, R5, R4
ROM:01DBD9F4                 EOR     R2, R2, R8
ROM:01DBD9F8                 AND     R5, R2, #0xFF
ROM:01DBD9FC                 LDR     R9, [R10,R5,LSL#2]
ROM:01DBDA00                 MOV     R5, #0xFF
ROM:01DBDA04                 AND     R5, R5, R2,LSR#8
ROM:01DBDA08                 LDR     R5, [LR,R5,LSL#2]
ROM:01DBDA0C                 EOR     R9, R9, R5
ROM:01DBDA10                 MOV     R5, #0xFF
ROM:01DBDA14                 AND     R5, R5, R2,LSR#16
ROM:01DBDA18                 LDR     R5, [R12,R5,LSL#2]
ROM:01DBDA1C                 MOV     R2, R2,LSR#24
ROM:01DBDA20                 LDR     R2, [R3,R2,LSL#2]
ROM:01DBDA24                 EOR     R5, R9, R5
ROM:01DBDA28                 EOR     R5, R5, R2
ROM:01DBDA2C                 ADD     R2, R8, R5
ROM:01DBDA30                 AND     R8, R2, #0xFF
ROM:01DBDA34                 LDR     R9, [R10,R8,LSL#2]
ROM:01DBDA38                 MOV     R8, #0xFF
ROM:01DBDA3C                 AND     R8, R8, R2,LSR#8
ROM:01DBDA40                 LDR     R8, [LR,R8,LSL#2]
ROM:01DBDA44                 EOR     R9, R9, R8
ROM:01DBDA48                 MOV     R8, #0xFF
ROM:01DBDA4C                 AND     R8, R8, R2,LSR#16
ROM:01DBDA50                 LDR     R8, [R12,R8,LSL#2]
ROM:01DBDA54                 MOV     R2, R2,LSR#24
ROM:01DBDA58                 LDR     R2, [R3,R2,LSL#2]
ROM:01DBDA5C                 EOR     R8, R9, R8
ROM:01DBDA60                 EOR     R2, R8, R2
ROM:01DBDA64                 ADD     R5, R5, R2
ROM:01DBDA68                 AND     R8, R5, #0xFF
ROM:01DBDA6C                 LDR     R9, [R10,R8,LSL#2]
ROM:01DBDA70                 MOV     R8, #0xFF
ROM:01DBDA74                 AND     R8, R8, R5,LSR#8
ROM:01DBDA78                 LDR     LR, [LR,R8,LSL#2]
ROM:01DBDA7C                 MOV     R8, #0xFF
ROM:01DBDA80                 AND     R8, R8, R5,LSR#16
ROM:01DBDA84                 LDR     R12, [R12,R8,LSL#2]
ROM:01DBDA88                 EOR     LR, R9, LR
ROM:01DBDA8C                 EOR     R12, LR, R12
ROM:01DBDA90                 MOV     LR, R5,LSR#24
ROM:01DBDA94                 LDR     R3, [R3,LR,LSL#2]
ROM:01DBDA98                 STR     R0, [R1,#0xC]
ROM:01DBDA9C                 EOR     R3, R12, R3
ROM:01DBDAA0                 ADD     R2, R2, R3
ROM:01DBDAA4                 EOR     R2, R7, R2
ROM:01DBDAA8                 EOR     R3, R6, R3
ROM:01DBDAAC                 STMIA   R1, {R2-R4}	;результат
ROM:01DBDAB0                 MOV     R0, #0
ROM:01DBDAB4                 LDMFD   SP!, {R4-R11,PC}
ROM:01DBDAB4 ; End of function sub_1DBCEF0

На опыте, поэтому сразу выделил чтение из табличек в функцию и сделал несколько итераций:


reg_tab=mem[r0:r0+0x10]
out_tab=mem[r1:r1+0x10]
key_tab=stack[0x74:0xff]

def F_func(v, rkey, t_a, t_b, t_c, t_d):
    b0 = v & 0xFF
    b1 = (v >> 8) & 0xFF
    b2 = (v >> 16) & 0xFF
    b3 = (v >> 24) & 0xFF
    return (read_u32(t_a, b0 * 4) ^
            read_u32(t_b, b1 * 4) ^
            read_u32(t_c, b2 * 4) ^
            read_u32(t_d, b3 * 4))
    
    r7 = read_u32(reg_tab, 0)
    r3 = read_u32(reg_tab, 4)
    r8 = read_u32(reg_tab, 8)
    r6 = read_u32(reg_tab, 12)

    k0 = read_u32(key_tab, 0)
    k1 = read_u32(key_tab, 4)
    r5 = r8 ^ k0
    r4 = (r6 ^ k1) ^ r5

    f0_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r4 = (f0_out) & 0xFFFFFFFF
    r5 = (r5 + r4) & 0xFFFFFFFF #ROM:01DBCF54 +

    f1_out = F_func(r5, 0, tab1, tab2, tab3, tab4)
    r5 = ( f1_out) & 0xFFFFFFFF
    r4 = (r4 + r5) & 0xFFFFFFFF # +

    f2_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r4 = (f2_out ) & 0xFFFFFFFF
    r5 = (r5 + r4) & 0xFFFFFFFF  # + ROM:01DBCFBC                 ADD     R5, R5, R4

    # ------------------------------------------
    r3 = r3 ^ r4
    k2 = read_u32(key_tab, 8)
    r7 = r7 ^ r5
    r5 = k2 ^ r7
    k3 = read_u32(key_tab, 12)
    r4 = (k3 ^ r3) ^ r5  # + ROM:01DBCFD8                 EOR     R4, R4, R5  # 46A1C2BD

    f3_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r4 = f3_out
    r5 = (r4 + r5) & 0xFFFFFFFF  # + B62CF143

    f4_out = F_func(r5, 0, tab1, tab2, tab3, tab4)
    r5 = (f4_out) & 0xFFFFFFFF # + 1201847A
    r4 = (r4 + r5) & 0xFFFFFFFF # + FD2ED284

    f5_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r4 = (f5_out ) & 0xFFFFFFFF # + 06B18708
    r5 = (r5 + r4) & 0xFFFFFFFF

    r8 = r8 ^ r5
    r5 = r6 ^ r4
    k4 = read_u32(key_tab, 0x10)
    r6 = k4 ^ r8
    k5 = read_u32(key_tab, 0x14)
    r4 = (k5 ^ r5) ^ r6 # + 22BFEFDD

    f6_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r6 = (r6 + f6_out) & 0xFFFFFFFF   # + 4038DDE2

    f7_out = F_func(r6, 0, tab1, tab2, tab3, tab4)
    r6 = ( f7_out) & 0xFFFFFFFF  # + 8BF5176C
    r4 = (f6_out + r6) & 0xFFFFFFFF  # +E3D1FF7F

    f8_out = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r4 = (f8_out ) & 0xFFFFFFFF   #  + 4E9DC527
    r6 = (r6 + r4) & 0xFFFFFFFF  #  + DA92DC93

    r4 = r3 ^ r4
    k6 = read_u32(key_tab, 0x18)
    r6 = r7 ^ r6
    r7 = k6 ^ r6
    k7 = read_u32(key_tab, 0x1C)
    r3 = (k7 ^ r4) ^ r7

    f9_out = F_func(r3, 0, tab1, tab2, tab3, tab4)
    r7 = (r7 + f9_out) & 0xFFFFFFFF   # + 4D37AF04

    f10_out = F_func(r7, 0, tab1, tab2, tab3, tab4)
    r7 = ( f10_out) & 0xFFFFFFFF  # + C1B56CB0
    r3 = (f9_out + r7) & 0xFFFFFFFF   # + 7BBC32EA

    f11_out = F_func(r3, 0, tab1, tab2, tab3, tab4)
    r3 = (f11_out ) & 0xFFFFFFFF   # + 843B6A03
    r7 = (f10_out + r3) & 0xFFFFFFFF # + 45F0D6B3

    r9 = r8 ^ r7
    r7 = r5 ^ r3
    k8 = read_u32(key_tab, 0x20)
    r5 = k8 ^ r9
    k9 = read_u32(key_tab, 0x24)
    r3 = (k9 ^ r7) ^ r5   # + 751FF778

    r3 = F_func(r3, 0, tab1, tab2, tab3, tab4)
    r5 = (r5 + r3) & 0xFFFFFFFF
    r5 = F_func(r5, 0, tab1, tab2, tab3, tab4)
    r8 = (r5 + r3) & 0xFFFFFFFF
    f14_out = F_func(r8, 0, tab1, tab2, tab3, tab4)
    r10 = f14_out
    r5 = (r5 + r10) & 0xFFFFFFFF  # adr:01DBD2A8

    r8 = r6 ^ r5
    r5 = read_u32(key_tab, 0x28)
    r4 = r4 ^ r10
    r6 = r5 ^ r8
    r5 = read_u32(key_tab, 0x2c)
    r5 = r5 ^ r4 ^ r6

    r5 = F_func(r5, 0, tab1, tab2, tab3, tab4)
    r6 = (r6 + r5) & 0xFFFFFFFF
    r6 = F_func(r6, 0, tab1, tab2, tab3, tab4)
    r5 = (r5 + r6) & 0xFFFFFFFF
    r5 = F_func(r5, 0, tab1, tab2, tab3, tab4)
    r6 = (r6 + r5) & 0xFFFFFFFF

    r9 = r9 ^ r6

    r6 = read_u32(key_tab, 0x30)
    r5 = r7 ^ r5
    r7 = r6 ^ r9
    r6 = read_u32(key_tab, 0x34)
    r6 = r6 ^ r5 ^ r7 # E46962FF

    r6 = F_func(r6, 0, tab1, tab2, tab3, tab4)
    r7 = (r7 + r6) & 0xFFFFFFFF
    r7 = F_func(r7, 0, tab1, tab2, tab3, tab4)
    r6 = (r6 + r7) & 0xFFFFFFFF
    r6 = F_func(r6, 0, tab1, tab2, tab3, tab4)
    r7 = (r7 + r6) & 0xFFFFFFFF  # EC25CC1A

    r6 = r6 ^ r4
    r4 = read_u32(key_tab, 0x38)
    r7 = r8 ^ r7
    r8 = r4 ^ r7
    r4 = read_u32(key_tab, 0x3c)
    r4 = r4 ^ r6 ^ r8 #  # F211E4C4

    # -------------------------
    r4 = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r8 = (r8 + r4) & 0xFFFFFFFF
    r8 = F_func(r8, 0, tab1, tab2, tab3, tab4)
    r4 = (r4 + r8) & 0xFFFFFFFF
    r4 = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r8 = (r8 + r4) & 0xFFFFFFFF  # 3C41F4F1
    r8 = r9 ^ r8
    r5 = r5 ^ r4
    r4 = read_u32(key_tab, 0x40)
    r9 = read_u32(key_tab, 0x44)
    r4 = r4 ^ r8
    r9 = r9 ^ r5
    r9 = r9 ^ r4
    #--------------------------
    r9 = F_func(r9, 0, tab1, tab2, tab3, tab4)
    r4 = (r4 + r9) & 0xFFFFFFFF
    r4 = F_func(r4, 0, tab1, tab2, tab3, tab4)
    r9 = (r9 + r4) & 0xFFFFFFFF
    r9 = F_func(r9, 0, tab1, tab2, tab3, tab4)
    r4 = (r4 + r9) & 0xFFFFFFFF  #

    r4 = r7 ^ r4
    r7 = read_u32(key_tab, 0x48)
    r6 = r6 ^ r9
    r9 = r7 ^ r4
    r7 = read_u32(key_tab, 0x4c)
    r7 = r7 ^ r6 ^ r9
    .....
    # и тд 

У меня не получилось свернуть это в цикл сразу, и как то уже руку набил, дошел до конца.

Сначала сообразил, что все манипуляции с табличками это работа с 2-мя числами, результат тоже 2 числа. Принцип такой - нужно избавится от регистров, проследить какие данные исходные, какие данные переиспользуются в следующем блоке. Выделил в функцию, код стал короче:


   def round3(a, b):
        f1 = F_func(b, 0, tab1, tab2, tab3, tab4)
        b = (a + f1) & 0xFFFFFFFF
        f2 = F_func(b, 0, tab1, tab2, tab3, tab4)
        a = (f1 + f2) & 0xFFFFFFFF
        f3 = F_func(a, 0, tab1, tab2, tab3, tab4)
        b = (f2 + f3) & 0xFFFFFFFF
        return f3, b

    r7 = read_u32(reg_tab, 0)
    r3 = read_u32(reg_tab, 4)
    r8 = read_u32(reg_tab, 8)
    r6 = read_u32(reg_tab, 12)

    k0 = read_u32(key_tab, 0)
    k1 = read_u32(key_tab, 4)
    r5 = r8 ^ k0 #r8
    r4 = r6 ^ k1 ^ r5 #r6

    r4, r5 = round3(r5, r4)

    r3 = r3 ^ r4 #r3
    r7 = r7 ^ r5 #r7

    k2 = read_u32(key_tab, 8)
    r5 = k2 ^ r7
    k3 = read_u32(key_tab, 12)
    r4 = k3 ^ r3 ^ r5

    r4, r5 = round3(r5, r4)

    r8 = r8 ^ r5
    r5 = r6 ^ r4
    k4 = read_u32(key_tab, 0x10)
    r6 = k4 ^ r8
    k5 = read_u32(key_tab, 0x14)
    r4 = (k5 ^ r5) ^ r6 # + 22BFEFDD

    r4, r6 = round3(r6, r4)

    r4 = r3 ^ r4
    k6 = read_u32(key_tab, 0x18)
    r6 = r7 ^ r6
    r7 = k6 ^ r6
    k7 = read_u32(key_tab, 0x1C)
    r3 = (k7 ^ r4) ^ r7

    r3, r7 = round3(r7, r3)

    r9 = r8 ^ r7
    r7 = r5 ^ r3
    k8 = read_u32(key_tab, 0x20)
    r5 = k8 ^ r9
    k9 = read_u32(key_tab, 0x24)
    r3 = (k9 ^ r7) ^ r5   # + 751FF778

    r10, r5 = round3(r5, r3)

    ... и т. д.


Сворачиваем еще раз. Принцип тот же - избавится от регистров, первая итерация как есть, потом определяем какие данные и как используются на следующей:

    for adr in range(0, 0x7c, 8):
        k0 = read_u32(key_tab, adr)
        k1 = read_u32(key_tab, adr + 4)
        r5 = k0 ^ x3
        r4 = k1 ^ x4 ^ r5
        r4, r5 = round3(r5, r4)
        x2 = x2 ^ r4
        x1 = x1 ^ r5 			# тут конец первой итерации
        x3, x4, x1,x2 = x1, x2, x3, x4  # определил, что для следующего блока нужно поменять местами переменные. Подсматриваем в эмуляторе

    write_u32(out_tab, 0, x3)		# запись результата. Можно не сильно задумываться подсмотреть в эмуляторе порядок
    write_u32(out_tab, 4, x4)
    write_u32(out_tab, 8, x1)
    write_u32(out_tab, 12, x2)

Остается прошагать в эмуляторе, сравнить результат до sha, пройти второе выполнение вплоть до конечного:

В целом всё, осталось всё причесать и дело сделано. Приведу под спойлером из-за табличек. Сам код вышел очень компактным, если вспомнить какие портянки были в начале.

Итоговый вариант

import hashlib

stack = bytearray(256)
mem = bytearray(0x60)
tab1 = bytes.fromhex(
    "29 89 A1 A8 05 85 81 84 16 C6 D2 D4 13 C3 D3 D0 14 44 50 54 1D 0D 11 1C 2C 8C A0 AC 25 05 21 24 1D 4D 51 5C 03 43 43 40 18 08 10 18 1E 0E 12 1C 11 41 51 50 3C CC F0 FC 0A CA C2 C8 23 43 63 60 28 08 20 28 04 44 40 44 20 00 20 20 1D 8D 91 9C 20 C0 E0 E0 22 C2 E2 E0 08 C8 C0 C8 17 07 13 14 25 85 A1 A4 0F 8F 83 8C 03 03 03 00 3B 4B 73 78 3B 8B B3 B8 13 03 13 10 12 C2 D2 D0 2E CE E2 EC 30 40 70 70 0C 8C 80 8C 3F 0F 33 3C 28 88 A0 A8 32 02 32 30 1D CD D1 DC 36 C6 F2 F4 34 44 70 74 2C CC E0 EC 15 85 91 94 0B 0B 03 08 17 47 53 54 1C 4C 50 5C 1B 4B 53 58 3D 8D B1 BC 01 01 01 00 24 04 20 24 1C 0C 10 1C 33 43 73 70 18 88 90 98 10 00 10 10 0C CC C0 CC 32 C2 F2 F0 19 C9 D1 D8 2C 0C 20 2C 27 C7 E3 E4 32 42 72 70 03 83 83 80 1B 8B 93 98 11 C1 D1 D0 06 86 82 84 09 C9 C1 C8 20 40 60 60 10 40 50 50 23 83 A3 A0 2B CB E3 E8 0D 0D 01 0C 36 86 B2 B4 1E 8E 92 9C 0F 4F 43 4C 37 87 B3 B4 1A 4A 52 58 06 C6 C2 C4 38 48 70 78 26 86 A2 A4 12 02 12 10 2F 8F A3 AC 15 C5 D1 D4 21 41 61 60 03 C3 C3 C0 34 84 B0 B4 01 41 41 40 12 42 52 50 3D 4D 71 7C 0D 8D 81 8C 08 08 00 08 1F 0F 13 1C 19 89 91 98 00 00 00 00 19 09 11 18 04 04 00 04 13 43 53 50 37 C7 F3 F4 21 C1 E1 E0 3D CD F1 FC 36 46 72 74 2F 0F 23 2C 27 07 23 24 30 80 B0 B0 0B 8B 83 88 0E 0E 02 0C 2B 8B A3 A8 22 82 A2 A0 2E 4E 62 6C 13 83 93 90 0D 4D 41 4C 29 49 61 68 3C 4C 70 7C 09 09 01 08 0A 0A 02 08 3F 8F B3 BC 2F CF E3 EC 33 C3 F3 F0 05 C5 C1 C4 07 87 83 84 14 04 10 14 3E CE F2 FC 24 44 60 64 1E CE D2 DC 2E 0E 22 2C 0B 4B 43 48 1A 0A 12 18 06 06 02 04 21 01 21 20 2B 4B 63 68 26 46 62 64 02 02 02 00 35 C5 F1 F4 12 82 92 90 0A 8A 82 88 0C 0C 00 0C 33 83 B3 B0 3E 4E 72 7C 10 C0 D0 D0 3A 4A 72 78 07 47 43 44 16 86 92 94 25 C5 E1 E4 26 06 22 24 00 80 80 80 2D 8D A1 AC 1F CF D3 DC 21 81 A1 A0 30 00 30 30 37 07 33 34 2E 8E A2 AC 36 06 32 34 15 05 11 14 22 02 22 20 38 08 30 38 34 C4 F0 F4 27 87 A3 A4 05 45 41 44 0C 4C 40 4C 01 81 81 80 29 C9 E1 E8 04 84 80 84 17 87 93 94 35 05 31 34 0B CB C3 C8 0E CE C2 CC 3C 0C 30 3C 31 41 71 70 11 01 11 10 07 C7 C3 C4 09 89 81 88 35 45 71 74 3B CB F3 F8 1A CA D2 D8 38 C8 F0 F8 14 84 90 94 19 49 51 58 02 82 82 80 04 C4 C0 C4 3F CF F3 FC 09 49 41 48 39 09 31 38 27 47 63 64 00 C0 C0 C0 0F CF C3 CC 17 C7 D3 D4 38 88 B0 B8 0F 0F 03 0C 0E 8E 82 8C 02 42 42 40 23 03 23 20 11 81 91 90 2C 4C 60 6C 1B CB D3 D8 24 84 A0 A4 34 04 30 34 31 C1 F1 F0 08 48 40 48 02 C2 C2 C0 2F 4F 63 6C 3D 0D 31 3C 2D 0D 21 2C 00 40 40 40 3E 8E B2 BC 3E 0E 32 3C 3C 8C B0 BC 01 C1 C1 C0 2A 8A A2 A8 3A 8A B2 B8 0E 4E 42 4C 15 45 51 54 3B 0B 33 38 1C CC D0 DC 28 48 60 68 3F 4F 73 7C 1C 8C 90 9C 18 C8 D0 D8 0A 4A 42 48 16 46 52 54 37 47 73 74 20 80 A0 A0 2D CD E1 EC 06 46 42 44 35 85 B1 B4 2B 0B 23 28 25 45 61 64 3A CA F2 F8 23 C3 E3 E0 39 89 B1 B8 31 81 B1 B0 1F 8F 93 9C 1E 4E 52 5C 39 C9 F1 F8 26 C6 E2 E4 32 82 B2 B0 31 01 31 30 2A CA E2 E8 2D 4D 61 6C 1F 4F 53 5C 24 C4 E0 E4 30 C0 F0 F0 0D CD C1 CC 08 88 80 88 16 06 12 14 3A 0A 32 38 18 48 50 58 14 C4 D0 D4 22 42 62 60 29 09 21 28 07 07 03 04 33 03 33 30 28 C8 E0 E8 1B 0B 13 18 05 05 01 04 39 49 71 78 10 80 90 90 2A 4A 62 68 2A 0A 22 28 1A 8A 92 98")
tab2 = bytes.fromhex(
    "38 38 08 30 E8 28 C8 E0 2C 2D 0D 21 A4 26 86 A2 CC 0F CF C3 DC 1E CE D2 B0 33 83 B3 B8 38 88 B0 AC 2F 8F A3 60 20 40 60 54 15 45 51 C4 07 C7 C3 44 04 44 40 6C 2F 4F 63 68 2B 4B 63 58 1B 4B 53 C0 03 C3 C3 60 22 42 62 30 33 03 33 B4 35 85 B1 28 29 09 21 A0 20 80 A0 E0 22 C2 E2 A4 27 87 A3 D0 13 C3 D3 90 11 81 91 10 11 01 11 04 06 06 02 1C 1C 0C 10 BC 3C 8C B0 34 36 06 32 48 0B 4B 43 EC 2F CF E3 88 08 88 80 6C 2C 4C 60 A8 28 88 A0 14 17 07 13 C4 04 C4 C0 14 16 06 12 F4 34 C4 F0 C0 02 C2 C2 44 05 45 41 E0 21 C1 E1 D4 16 C6 D2 3C 3F 0F 33 3C 3D 0D 31 8C 0E 8E 82 98 18 88 90 28 28 08 20 4C 0E 4E 42 F4 36 C6 F2 3C 3E 0E 32 A4 25 85 A1 F8 39 C9 F1 0C 0D 0D 01 DC 1F CF D3 D8 18 C8 D0 28 2B 0B 23 64 26 46 62 78 3A 4A 72 24 27 07 23 2C 2F 0F 23 F0 31 C1 F1 70 32 42 72 40 02 42 42 D4 14 C4 D0 40 01 41 41 C0 00 C0 C0 70 33 43 73 64 27 47 63 AC 2C 8C A0 88 0B 8B 83 F4 37 C7 F3 AC 2D 8D A1 80 00 80 80 1C 1F 0F 13 C8 0A CA C2 2C 2C 0C 20 A8 2A 8A A2 34 34 04 30 D0 12 C2 D2 08 0B 0B 03 EC 2E CE E2 E8 29 C9 E1 5C 1D 4D 51 94 14 84 90 18 18 08 10 F8 38 C8 F0 54 17 47 53 AC 2E 8E A2 08 08 08 00 C4 05 C5 C1 10 13 03 13 CC 0D CD C1 84 06 86 82 B8 39 89 B1 FC 3F CF F3 7C 3D 4D 71 C0 01 C1 C1 30 31 01 31 F4 35 C5 F1 88 0A 8A 82 68 2A 4A 62 B0 31 81 B1 D0 11 C1 D1 20 20 00 20 D4 17 C7 D3 00 02 02 02 20 22 02 22 04 04 04 00 68 28 48 60 70 31 41 71 04 07 07 03 D8 1B CB D3 9C 1D 8D 91 98 19 89 91 60 21 41 61 BC 3E 8E B2 E4 26 C6 E2 58 19 49 51 DC 1D CD D1 50 11 41 51 90 10 80 90 DC 1C CC D0 98 1A 8A 92 A0 23 83 A3 A8 2B 8B A3 D0 10 C0 D0 80 01 81 81 0C 0F 0F 03 44 07 47 43 18 1A 0A 12 E0 23 C3 E3 EC 2C CC E0 8C 0D 8D 81 BC 3F 8F B3 94 16 86 92 78 3B 4B 73 5C 1C 4C 50 A0 22 82 A2 A0 21 81 A1 60 23 43 63 20 23 03 23 4C 0D 4D 41 C8 08 C8 C0 9C 1E 8E 92 9C 1C 8C 90 38 3A 0A 32 0C 0C 0C 00 2C 2E 0E 22 B8 3A 8A B2 6C 2E 4E 62 9C 1F 8F 93 58 1A 4A 52 F0 32 C2 F2 90 12 82 92 F0 33 C3 F3 48 09 49 41 78 38 48 70 CC 0C CC C0 14 15 05 11 F8 3B CB F3 70 30 40 70 74 35 45 71 7C 3F 4F 73 34 35 05 31 10 10 00 10 00 03 03 03 64 24 44 60 6C 2D 4D 61 C4 06 C6 C2 74 34 44 70 D4 15 C5 D1 B4 34 84 B0 E8 2A CA E2 08 09 09 01 74 36 46 72 18 19 09 11 FC 3E CE F2 40 00 40 40 10 12 02 12 E0 20 C0 E0 BC 3D 8D B1 04 05 05 01 F8 3A CA F2 00 01 01 01 F0 30 C0 F0 28 2A 0A 22 5C 1E 4E 52 A8 29 89 A1 54 16 46 52 40 03 43 43 84 05 85 81 14 14 04 10 88 09 89 81 98 1B 8B 93 B0 30 80 B0 E4 25 C5 E1 48 08 48 40 78 39 49 71 94 17 87 93 FC 3C CC F0 1C 1E 0E 12 80 02 82 82 20 21 01 21 8C 0C 8C 80 18 1B 0B 13 5C 1F 4F 53 74 37 47 73 54 14 44 50 B0 32 82 B2 1C 1D 0D 11 24 25 05 21 4C 0F 4F 43 00 00 00 00 44 06 46 42 EC 2D CD E1 58 18 48 50 50 12 42 52 E8 2B CB E3 7C 3E 4E 72 D8 1A CA D2 C8 09 C9 C1 FC 3D CD F1 30 30 00 30 94 15 85 91 64 25 45 61 3C 3C 0C 30 B4 36 86 B2 E4 24 C4 E0 B8 3B 8B B3 7C 3C 4C 70 0C 0E 0E 02 50 10 40 50 38 39 09 31 24 26 06 22 30 32 02 32 84 04 84 80 68 29 49 61 90 13 83 93 34 37 07 33 E4 27 C7 E3 24 24 04 20 A4 24 84 A0 C8 0B CB C3 50 13 43 53 08 0A 0A 02 84 07 87 83 D8 19 C9 D1 4C 0C 4C 40 80 03 83 83 8C 0F 8F 83 CC 0E CE C2 38 3B 0B 33 48 0A 4A 42 B4 37 87 B3")
tab3 = bytes.fromhex(
    "A1 A8 29 89 81 84 05 85 D2 D4 16 C6 D3 D0 13 C3 50 54 14 44 11 1C 1D 0D A0 AC 2C 8C 21 24 25 05 51 5C 1D 4D 43 40 03 43 10 18 18 08 12 1C 1E 0E 51 50 11 41 F0 FC 3C CC C2 C8 0A CA 63 60 23 43 20 28 28 08 40 44 04 44 20 20 20 00 91 9C 1D 8D E0 E0 20 C0 E2 E0 22 C2 C0 C8 08 C8 13 14 17 07 A1 A4 25 85 83 8C 0F 8F 03 00 03 03 73 78 3B 4B B3 B8 3B 8B 13 10 13 03 D2 D0 12 C2 E2 EC 2E CE 70 70 30 40 80 8C 0C 8C 33 3C 3F 0F A0 A8 28 88 32 30 32 02 D1 DC 1D CD F2 F4 36 C6 70 74 34 44 E0 EC 2C CC 91 94 15 85 03 08 0B 0B 53 54 17 47 50 5C 1C 4C 53 58 1B 4B B1 BC 3D 8D 01 00 01 01 20 24 24 04 10 1C 1C 0C 73 70 33 43 90 98 18 88 10 10 10 00 C0 CC 0C CC F2 F0 32 C2 D1 D8 19 C9 20 2C 2C 0C E3 E4 27 C7 72 70 32 42 83 80 03 83 93 98 1B 8B D1 D0 11 C1 82 84 06 86 C1 C8 09 C9 60 60 20 40 50 50 10 40 A3 A0 23 83 E3 E8 2B CB 01 0C 0D 0D B2 B4 36 86 92 9C 1E 8E 43 4C 0F 4F B3 B4 37 87 52 58 1A 4A C2 C4 06 C6 70 78 38 48 A2 A4 26 86 12 10 12 02 A3 AC 2F 8F D1 D4 15 C5 61 60 21 41 C3 C0 03 C3 B0 B4 34 84 41 40 01 41 52 50 12 42 71 7C 3D 4D 81 8C 0D 8D 00 08 08 08 13 1C 1F 0F 91 98 19 89 00 00 00 00 11 18 19 09 00 04 04 04 53 50 13 43 F3 F4 37 C7 E1 E0 21 C1 F1 FC 3D CD 72 74 36 46 23 2C 2F 0F 23 24 27 07 B0 B0 30 80 83 88 0B 8B 02 0C 0E 0E A3 A8 2B 8B A2 A0 22 82 62 6C 2E 4E 93 90 13 83 41 4C 0D 4D 61 68 29 49 70 7C 3C 4C 01 08 09 09 02 08 0A 0A B3 BC 3F 8F E3 EC 2F CF F3 F0 33 C3 C1 C4 05 C5 83 84 07 87 10 14 14 04 F2 FC 3E CE 60 64 24 44 D2 DC 1E CE 22 2C 2E 0E 43 48 0B 4B 12 18 1A 0A 02 04 06 06 21 20 21 01 63 68 2B 4B 62 64 26 46 02 00 02 02 F1 F4 35 C5 92 90 12 82 82 88 0A 8A 00 0C 0C 0C B3 B0 33 83 72 7C 3E 4E D0 D0 10 C0 72 78 3A 4A 43 44 07 47 92 94 16 86 E1 E4 25 C5 22 24 26 06 80 80 00 80 A1 AC 2D 8D D3 DC 1F CF A1 A0 21 81 30 30 30 00 33 34 37 07 A2 AC 2E 8E 32 34 36 06 11 14 15 05 22 20 22 02 30 38 38 08 F0 F4 34 C4 A3 A4 27 87 41 44 05 45 40 4C 0C 4C 81 80 01 81 E1 E8 29 C9 80 84 04 84 93 94 17 87 31 34 35 05 C3 C8 0B CB C2 CC 0E CE 30 3C 3C 0C 71 70 31 41 11 10 11 01 C3 C4 07 C7 81 88 09 89 71 74 35 45 F3 F8 3B CB D2 D8 1A CA F0 F8 38 C8 90 94 14 84 51 58 19 49 82 80 02 82 C0 C4 04 C4 F3 FC 3F CF 41 48 09 49 31 38 39 09 63 64 27 47 C0 C0 00 C0 C3 CC 0F CF D3 D4 17 C7 B0 B8 38 88 03 0C 0F 0F 82 8C 0E 8E 42 40 02 42 23 20 23 03 91 90 11 81 60 6C 2C 4C D3 D8 1B CB A0 A4 24 84 30 34 34 04 F1 F0 31 C1 40 48 08 48 C2 C0 02 C2 63 6C 2F 4F 31 3C 3D 0D 21 2C 2D 0D 40 40 00 40 B2 BC 3E 8E 32 3C 3E 0E B0 BC 3C 8C C1 C0 01 C1 A2 A8 2A 8A B2 B8 3A 8A 42 4C 0E 4E 51 54 15 45 33 38 3B 0B D0 DC 1C CC 60 68 28 48 73 7C 3F 4F 90 9C 1C 8C D0 D8 18 C8 42 48 0A 4A 52 54 16 46 73 74 37 47 A0 A0 20 80 E1 EC 2D CD 42 44 06 46 B1 B4 35 85 23 28 2B 0B 61 64 25 45 F2 F8 3A CA E3 E0 23 C3 B1 B8 39 89 B1 B0 31 81 93 9C 1F 8F 52 5C 1E 4E F1 F8 39 C9 E2 E4 26 C6 B2 B0 32 82 31 30 31 01 E2 E8 2A CA 61 6C 2D 4D 53 5C 1F 4F E0 E4 24 C4 F0 F0 30 C0 C1 CC 0D CD 80 88 08 88 12 14 16 06 32 38 3A 0A 50 58 18 48 D0 D4 14 C4 62 60 22 42 21 28 29 09 03 04 07 07 33 30 33 03 E0 E8 28 C8 13 18 1B 0B 01 04 05 05 71 78 39 49 90 90 10 80 62 68 2A 4A 22 28 2A 0A 92 98 1A 8A")
tab4 = bytes.fromhex(
    "08 30 38 38 C8 E0 E8 28 0D 21 2C 2D 86 A2 A4 26 CF C3 CC 0F CE D2 DC 1E 83 B3 B0 33 88 B0 B8 38 8F A3 AC 2F 40 60 60 20 45 51 54 15 C7 C3 C4 07 44 40 44 04 4F 63 6C 2F 4B 63 68 2B 4B 53 58 1B C3 C3 C0 03 42 62 60 22 03 33 30 33 85 B1 B4 35 09 21 28 29 80 A0 A0 20 C2 E2 E0 22 87 A3 A4 27 C3 D3 D0 13 81 91 90 11 01 11 10 11 06 02 04 06 0C 10 1C 1C 8C B0 BC 3C 06 32 34 36 4B 43 48 0B CF E3 EC 2F 88 80 88 08 4C 60 6C 2C 88 A0 A8 28 07 13 14 17 C4 C0 C4 04 06 12 14 16 C4 F0 F4 34 C2 C2 C0 02 45 41 44 05 C1 E1 E0 21 C6 D2 D4 16 0F 33 3C 3F 0D 31 3C 3D 8E 82 8C 0E 88 90 98 18 08 20 28 28 4E 42 4C 0E C6 F2 F4 36 0E 32 3C 3E 85 A1 A4 25 C9 F1 F8 39 0D 01 0C 0D CF D3 DC 1F C8 D0 D8 18 0B 23 28 2B 46 62 64 26 4A 72 78 3A 07 23 24 27 0F 23 2C 2F C1 F1 F0 31 42 72 70 32 42 42 40 02 C4 D0 D4 14 41 41 40 01 C0 C0 C0 00 43 73 70 33 47 63 64 27 8C A0 AC 2C 8B 83 88 0B C7 F3 F4 37 8D A1 AC 2D 80 80 80 00 0F 13 1C 1F CA C2 C8 0A 0C 20 2C 2C 8A A2 A8 2A 04 30 34 34 C2 D2 D0 12 0B 03 08 0B CE E2 EC 2E C9 E1 E8 29 4D 51 5C 1D 84 90 94 14 08 10 18 18 C8 F0 F8 38 47 53 54 17 8E A2 AC 2E 08 00 08 08 C5 C1 C4 05 03 13 10 13 CD C1 CC 0D 86 82 84 06 89 B1 B8 39 CF F3 FC 3F 4D 71 7C 3D C1 C1 C0 01 01 31 30 31 C5 F1 F4 35 8A 82 88 0A 4A 62 68 2A 81 B1 B0 31 C1 D1 D0 11 00 20 20 20 C7 D3 D4 17 02 02 00 02 02 22 20 22 04 00 04 04 48 60 68 28 41 71 70 31 07 03 04 07 CB D3 D8 1B 8D 91 9C 1D 89 91 98 19 41 61 60 21 8E B2 BC 3E C6 E2 E4 26 49 51 58 19 CD D1 DC 1D 41 51 50 11 80 90 90 10 CC D0 DC 1C 8A 92 98 1A 83 A3 A0 23 8B A3 A8 2B C0 D0 D0 10 81 81 80 01 0F 03 0C 0F 47 43 44 07 0A 12 18 1A C3 E3 E0 23 CC E0 EC 2C 8D 81 8C 0D 8F B3 BC 3F 86 92 94 16 4B 73 78 3B 4C 50 5C 1C 82 A2 A0 22 81 A1 A0 21 43 63 60 23 03 23 20 23 4D 41 4C 0D C8 C0 C8 08 8E 92 9C 1E 8C 90 9C 1C 0A 32 38 3A 0C 00 0C 0C 0E 22 2C 2E 8A B2 B8 3A 4E 62 6C 2E 8F 93 9C 1F 4A 52 58 1A C2 F2 F0 32 82 92 90 12 C3 F3 F0 33 49 41 48 09 48 70 78 38 CC C0 CC 0C 05 11 14 15 CB F3 F8 3B 40 70 70 30 45 71 74 35 4F 73 7C 3F 05 31 34 35 00 10 10 10 03 03 00 03 44 60 64 24 4D 61 6C 2D C6 C2 C4 06 44 70 74 34 C5 D1 D4 15 84 B0 B4 34 CA E2 E8 2A 09 01 08 09 46 72 74 36 09 11 18 19 CE F2 FC 3E 40 40 40 00 02 12 10 12 C0 E0 E0 20 8D B1 BC 3D 05 01 04 05 CA F2 F8 3A 01 01 00 01 C0 F0 F0 30 0A 22 28 2A 4E 52 5C 1E 89 A1 A8 29 46 52 54 16 43 43 40 03 85 81 84 05 04 10 14 14 89 81 88 09 8B 93 98 1B 80 B0 B0 30 C5 E1 E4 25 48 40 48 08 49 71 78 39 87 93 94 17 CC F0 FC 3C 0E 12 1C 1E 82 82 80 02 01 21 20 21 8C 80 8C 0C 0B 13 18 1B 4F 53 5C 1F 47 73 74 37 44 50 54 14 82 B2 B0 32 0D 11 1C 1D 05 21 24 25 4F 43 4C 0F 00 00 00 00 46 42 44 06 CD E1 EC 2D 48 50 58 18 42 52 50 12 CB E3 E8 2B 4E 72 7C 3E CA D2 D8 1A C9 C1 C8 09 CD F1 FC 3D 00 30 30 30 85 91 94 15 45 61 64 25 0C 30 3C 3C 86 B2 B4 36 C4 E0 E4 24 8B B3 B8 3B 4C 70 7C 3C 0E 02 0C 0E 40 50 50 10 09 31 38 39 06 22 24 26 02 32 30 32 84 80 84 04 49 61 68 29 83 93 90 13 07 33 34 37 C7 E3 E4 27 04 20 24 24 84 A0 A4 24 CB C3 C8 0B 43 53 50 13 0A 02 08 0A 87 83 84 07 C9 D1 D8 19 4C 40 4C 0C 83 83 80 03 8F 83 8C 0F CE C2 CC 0E 0B 33 38 3B 4A 42 48 0A 87 B3 B4 37")
tabs = (tab1,tab2,tab3,tab4)
def dump(tab,start, ln):
    for offset in range(start, start + ln, 16):
        chunk = tab[offset:offset + 16]
        print(f"{hex(offset)}: {' '.join(f'{b:02X}' for b in chunk)}")

def write_u32(tab, addr, value):
    tab[addr+3 ] = value & 0xff
    tab[addr+2] = (value>>8) & 0xff
    tab[addr+1] = (value>>16) & 0xff
    tab[addr+0] = (value>>24) & 0xff

def read_u32(tab, addr):
    res = tab[addr]
    res = res << 8 | tab[addr+1]
    res = res << 8 | tab[addr+2]
    res = res << 8 | tab[addr+3]
    return res

def F_func(v, tabs):
    return (read_u32(tabs[0], (v & 0xFF) * 4) ^
            read_u32(tabs[1], ((v >> 8) & 0xFF) * 4) ^
            read_u32(tabs[2], ((v >> 16) & 0xFF) * 4) ^
            read_u32(tabs[3], ((v >> 24) & 0xFF) * 4))

def _encrypt( reg_tab, out_tab, key_tab, tabs):
    def round3(a, b):
        f1 = F_func(b, tabs)
        b = (a + f1) & 0xFFFFFFFF
        f2 = F_func(b, tabs)
        a = (f1 + f2) & 0xFFFFFFFF
        f3 = F_func(a, tabs)
        b = (f2 + f3) & 0xFFFFFFFF
        return f3, b

    x1 = read_u32(reg_tab, 0)
    x2 = read_u32(reg_tab, 4)
    x3 = read_u32(reg_tab, 8)
    x4 = read_u32(reg_tab, 12)

    for adr in range(0, 0x7c, 8):
        k0 = read_u32(key_tab, adr)
        k1 = read_u32(key_tab, adr + 4)
        r5 = k0 ^ x3
        r4 = k1 ^ x4 ^ r5
        r4, r5 = round3(r5, r4)
        x2 = x2 ^ r4
        x1 = x1 ^ r5
        x3, x4, x1,x2 = x1, x2, x3, x4

    write_u32(out_tab, 0, x3)
    write_u32(out_tab, 4, x4)
    write_u32(out_tab, 8, x1)
    write_u32(out_tab, 12, x2)

    return out_tab

def sub_1DBE83C (r0, r1, r2):
    global stack, mem, tabs
    stack = bytes.fromhex("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 DB E8 78 26 8D 66 A7 35 A8 1A 81 6F BA D9 FA 36 16 25 01 D0 73 01 5C 3C 75 4B C2 C1 8C E9 4A B0 D1 0F 3E 66 77 6C A4 F2 B2 13 98 54 B8 D9 E1 F6 6B DA B9 A3 AD BD 1D 9E 01 71 88 D7 E5 4E 81 17 55 68 9A 43 3E 6A C5 E8 F9 02 45 69 B3 F0 E1 DA C4 66 26 51 25 CB 71 67 00 14 9D BE 61 36 3F 1D 4E 08 C4 61 E8 31 C6 21 83 42 9D 4C 42 5E 6F CE DF 8A C0 01 D8 D7 61 DA DC E0 E8 FA F9 5C C0 94 3A CC E4 91 FA 00 C8 7A B8 39 1F 51 CF CC 6C 4C 7E 83 ED 65 43 97 31 9B 48 13 C1 2F A9 69 0A CA 04 F3 50 00 00 00 00 00 00 00 00 02 03 D6 54")

    out_tab = _encrypt(
        reg_tab=mem[r0:r0+0x10],
        out_tab=mem[r1:r1+0x10],
        key_tab=stack[0x74:0xff],
        tabs = tabs)
    mem[r1:r1+0x10] = out_tab[0x0:0x10]

def generate_passwords(serial_hex):
    global mem
    sn_bytes = bytes.fromhex(serial_hex)
    if not((sn_bytes[6]==0x90) & (sn_bytes[7]==0x1B)):
        print ("not ss02-1 crum")
        return bytes.fromhex("00"), bytes.fromhex("00")

    mem[0x50:0x58] = sn_bytes
    mem[0x58:0x5E] = b"SECPRT"
    mem[0x5E] = 0
    mem[0x5F] = 0
    for r0 in range(8):
        mem[0x5E] = mem[0x5E] ^ mem[0x50 + r0]
        mem[0x5F] = mem[0x5F] ^ mem[0x50 + (r0 << 1)]

    sub_1DBE83C (r0 = 0x50, r1 = 0x3c,r2 = 0x10)

    block_2 = mem[0x3C:0x4C]
    hash_2 = hashlib.sha1(block_2).digest()
    mem[0x10:0x24] = hash_2
    mem [0x24:0x2c] = mem[0x18:0x20]

    sub_1DBE83C (r0 = 0x10, r1 = 0x0,r2 = 0x10)
    mem[0x2c:0x2c+8] = mem[0x8:0x10]
    auth_pass = mem[0x2c:0x2C+8]
    write_pass = mem[0x24:0x27]
    #print("Дамп:")
    #dump (mem, 0x0, 16*16)

    return auth_pass, write_pass

serial = input("SN:")
auth, write = generate_passwords(serial)

print(f"Входной SN:  {serial}")
print(f"Auth Pass:   {auth.hex().upper()}")
print(f"Write Pass:  {write.hex().upper()}")

Результат:

SN:112233445566901B
Входной SN:  112233445566901B
Auth Pass:   391B22CD6DD7B5C4
Write Pass:  26851F

Сошлось )

Так же решил посмотреть результат дизасемлирования через ghidra_12.1.2_PUBLIC. Вот так выглядит функция 01dbe83c:

void FUN_01dbe83c(undefined4 param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 local_9c;
  undefined4 uStack_98;
  undefined4 uStack_94;
  undefined4 uStack_90;
  undefined1 auStack_8c [128];
  
  local_9c = *DAT_01dbe890;
  uStack_98 = DAT_01dbe890[1];
  uStack_94 = DAT_01dbe890[2];
  uStack_90 = DAT_01dbe890[3];
  FUN_01dbc554(&local_9c,auStack_8c,param_3,DAT_01dbe894[1],*DAT_01dbe894,DAT_01dbe894[1],
               DAT_01dbe894[2],DAT_01dbe894[3]);
  FUN_01dbcef0(param_1,param_2,auStack_8c);
  return;

Первая 1DBC554, которую в итоге делать не пришлось:

FUN_01dbc554
void FUN_01dbc554(byte *param_1,uint *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  
  iVar4 = DAT_01dbceec;
  iVar3 = DAT_01dbcee8;
  iVar2 = DAT_01dbcee4;
  iVar1 = DAT_01dbcee0;
  uVar7 = (uint)*param_1;
  uVar6 = (uint)param_1[2];
  uVar8 = (uint)param_1[1];
  uVar9 = (uint)param_1[3];
  uVar5 = uVar7 + uVar6 + 0x61c88647;
  *param_2 = *(uint *)(DAT_01dbcee0 + (uVar5 & 0xff) * 4) ^
             *(uint *)(DAT_01dbcee4 + (uVar5 >> 8 & 0xff) * 4) ^
             *(uint *)(DAT_01dbcee8 + (uVar5 >> 0x10 & 0xff) * 4) ^
             *(uint *)(DAT_01dbceec + (uVar5 >> 0x18) * 4);
  uVar5 = (uVar8 - uVar9) + 0x9e3779b9;
  param_2[1] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x1000000 + uVar6 + 0xc3910c8d;
  param_2[2] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = (uVar7 * 0x1000000 - uVar9) + 0x3c6ef373;
  param_2[3] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x1000000 + uVar6 * 0x100 + 0x8722191a;
  param_2[4] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x1000000 + uVar9 * -0x100 + 0x78dde6e6;
  param_2[5] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x10000 + uVar6 * 0x100 + 0xe443234;
  param_2[6] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x10000 + uVar9 * -0x100 + 0xf1bbcdcc;
  param_2[7] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x10000 + uVar6 * 0x10000 + 0x1c886467;
  param_2[8] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x10000 + uVar9 * -0x10000 + 0xe3779b99;
  param_2[9] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
               *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
               *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x100 + uVar6 * 0x10000 + 0x3910c8cd;
  param_2[10] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
                *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x100 + uVar9 * -0x10000 + 0xc6ef3733;
  param_2[0xb] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4)
                 ^ *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                 *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x100 + uVar6 * 0x1000000 + 0x72219199;
  param_2[0xc] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4)
                 ^ *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                 *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x100 + uVar9 * -0x1000000 + 0x8dde6e67;
  param_2[0xd] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4)
                 ^ *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                 *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 + uVar6 * 0x1000000 + 0xe4432331;
  param_2[0xe] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4)
                 ^ *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                 *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 + uVar9 * -0x1000000 + 0x1bbcdccf;
  param_2[0xf] = *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4)
                 ^ *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^
                 *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 + uVar9 + 0xc8864662;
  param_2[0x10] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = (uVar7 - uVar6) + 0x3779b99e;
  param_2[0x11] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x1000000 + uVar9 + 0x910c8cc4;
  param_2[0x12] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = (uVar8 * 0x1000000 - uVar6) + 0x6ef3733c;
  param_2[0x13] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x1000000 + uVar9 * 0x100 + 0x22191988;
  param_2[0x14] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x1000000 + uVar6 * -0x100 + 0xdde6e678;
  param_2[0x15] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x10000 + uVar9 * 0x100 + 0x4432330f;
  param_2[0x16] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x10000 + uVar6 * -0x100 + 0xbbcdccf1;
  param_2[0x17] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x10000 + uVar9 * 0x10000 + 0x8864661d;
  param_2[0x18] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x10000 + uVar6 * -0x10000 + 0x779b99e3;
  param_2[0x19] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x100 + uVar9 * 0x10000 + 0x10c8cc3a;
  param_2[0x1a] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x100 + uVar6 * -0x10000 + 0xef3733c6;
  param_2[0x1b] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 * 0x100 + uVar9 * 0x1000000 + 0x21919873;
  param_2[0x1c] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 * 0x100 + uVar6 * -0x1000000 + 0xde6e678d;
  param_2[0x1d] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar7 + uVar9 * 0x1000000 + 0x432330e5;
  param_2[0x1e] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  uVar5 = uVar8 + uVar6 * -0x1000000 + 0xbcdccf1b;
  param_2[0x1f] =
       *(uint *)(iVar1 + (uVar5 & 0xff) * 4) ^ *(uint *)(iVar2 + (uVar5 >> 8 & 0xff) * 4) ^
       *(uint *)(iVar3 + (uVar5 >> 0x10 & 0xff) * 4) ^ *(uint *)(iVar4 + (uVar5 >> 0x18) * 4);
  return;

Вторая:

FUN_01dbcef0
undefined4 FUN_01dbcef0(uint *param_1,uint *param_2,uint *param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  
  uVar3 = param_1[2] ^ *param_3;
  uVar1 = param_3[1] ^ param_1[3] ^ uVar3;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar3 = uVar3 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar3 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar3 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar3 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar3 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar3 = param_1[1] ^ uVar1;
  uVar6 = *param_1 ^ uVar4 + uVar1;
  uVar4 = param_3[2] ^ uVar6;
  uVar1 = param_3[3] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar2 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = param_1[2] ^ uVar4 + uVar2;
  uVar2 = param_1[3] ^ uVar2;
  uVar4 = param_3[4] ^ uVar7;
  uVar1 = param_3[5] ^ uVar2 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar3 = uVar3 ^ uVar1;
  uVar6 = uVar6 ^ uVar4 + uVar1;
  uVar4 = param_3[6] ^ uVar6;
  uVar1 = param_3[7] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar4 + uVar1;
  uVar2 = uVar2 ^ uVar1;
  uVar4 = param_3[8] ^ uVar7;
  uVar1 = param_3[9] ^ uVar2 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar6 = uVar6 ^ uVar4 + uVar1;
  uVar3 = uVar3 ^ uVar1;
  uVar4 = param_3[10] ^ uVar6;
  uVar1 = param_3[0xb] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar4 + uVar1;
  uVar2 = uVar2 ^ uVar1;
  uVar4 = param_3[0xc] ^ uVar7;
  uVar1 = param_3[0xd] ^ uVar2 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar3 = uVar3 ^ uVar1;
  uVar6 = uVar6 ^ uVar4 + uVar1;
  uVar4 = param_3[0xe] ^ uVar6;
  uVar1 = param_3[0xf] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar4 + uVar1;
  uVar2 = uVar2 ^ uVar1;
  uVar1 = param_3[0x10] ^ uVar7;
  uVar4 = param_3[0x11] ^ uVar2 ^ uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar6 = uVar6 ^ uVar1 + uVar4;
  uVar3 = uVar3 ^ uVar4;
  uVar4 = param_3[0x12] ^ uVar6;
  uVar1 = param_3[0x13] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar4 + uVar1;
  uVar2 = uVar2 ^ uVar1;
  uVar1 = param_3[0x14] ^ uVar7;
  uVar4 = param_3[0x15] ^ uVar2 ^ uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar6 = uVar6 ^ uVar1 + uVar4;
  uVar3 = uVar3 ^ uVar4;
  uVar1 = param_3[0x16] ^ uVar6;
  uVar4 = param_3[0x17] ^ uVar3 ^ uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar1 + uVar4;
  uVar2 = uVar2 ^ uVar4;
  uVar1 = param_3[0x18] ^ uVar7;
  uVar4 = param_3[0x19] ^ uVar2 ^ uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar6 = uVar6 ^ uVar1 + uVar4;
  uVar3 = uVar3 ^ uVar4;
  uVar4 = param_3[0x1a] ^ uVar6;
  uVar1 = param_3[0x1b] ^ uVar3 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar7 = uVar7 ^ uVar4 + uVar1;
  uVar2 = uVar2 ^ uVar1;
  uVar4 = param_3[0x1c] ^ uVar7;
  uVar1 = param_3[0x1d] ^ uVar2 ^ uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar1;
  uVar4 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar1 = uVar1 + uVar4;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar6 = uVar6 ^ uVar4 + uVar1;
  uVar3 = uVar3 ^ uVar1;
  uVar4 = param_3[0x1e] ^ uVar6;
  uVar1 = param_3[0x1f] ^ uVar3 ^ uVar4;
  uVar5 = *(uint *)(DAT_01dbcee0 + (uVar1 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar1 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar1 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar1 >> 0x18) * 4);
  uVar4 = uVar4 + uVar5;
  uVar1 = *(uint *)(DAT_01dbcee0 + (uVar4 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee4 + (uVar4 >> 8 & 0xff) * 4) ^
          *(uint *)(DAT_01dbcee8 + (uVar4 >> 0x10 & 0xff) * 4) ^
          *(uint *)(DAT_01dbceec + (uVar4 >> 0x18) * 4);
  uVar5 = uVar5 + uVar1;
  uVar8 = *(uint *)(DAT_01dbcee0 + (uVar5 & 0xff) * 4);
  uVar10 = *(uint *)(DAT_01dbcee4 + (uVar5 >> 8 & 0xff) * 4);
  uVar9 = *(uint *)(DAT_01dbcee8 + (uVar5 >> 0x10 & 0xff) * 4);
  uVar4 = *(uint *)(DAT_01dbceec + (uVar5 >> 0x18) * 4);
  param_2[3] = uVar3;
  uVar4 = uVar8 ^ uVar10 ^ uVar9 ^ uVar4;
  *param_2 = uVar7 ^ uVar1 + uVar4;
  param_2[1] = uVar2 ^ uVar4;
  param_2[2] = uVar6;
  return 0;
}

Очень круто на самом деле! Буквально итерация перед сворачиванием цикла! Очень информативно. Наверное можно загрузить в ИИ-шку с просьбой перевести на питон, объяснить что такое DAT_01dbcee0 и т.д. ) Возможно отладка станет дольше, а может и нет, кто знает.

На этом всё, надеюсь получилось поделиться полезными инструментами и подходом! Спасибо за внимание!