aboutsummaryrefslogtreecommitdiff
path: root/bin/patcher.py
blob: 601b2a899a68aa5263d3bdea0dcafc54425c4b86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import pefile

pe = pefile.PE("JonahHex.exe")

# Patching the jumps.
jmp_tls_1 = [0x00001703, 0x0000170C, 0x000020A6]
jmp_main = [0x000021AC, 0x00002830]

xor_tls_1 = [0x8, 0x40, 0x200]
xor_main = [0x2fe095ad, 0x1660d216]

for i, address in enumerate(jmp_tls_1):
	value = pe.get_dword_at_rva(address);
	pe.set_dword_at_rva(address, value ^ xor_tls_1[i])

for i, address in enumerate(jmp_main):
	value = pe.get_dword_at_rva(address);
	pe.set_dword_at_rva(address, value ^ xor_main[i])

# Patching the ciphertext checks.
des_intermediate_addr = [0x00002F3A, 0x00002F47]
des_output_addr = [0x00002537, 0x00002544]

des_intermediate_value = [0xB3143B79, 0x19A2E3D5]
des_output_value = [0xEEC5860E, 0x8E0A2C1F]

cipherxor = 0x41424344

for i in xrange(0, 2):
	pe.set_dword_at_rva(des_intermediate_addr[i], des_intermediate_value[i] ^ cipherxor)
	print "DES intermediate value " + str(i) + ": " + hex(des_intermediate_value[i] ^ cipherxor)[:-1]
	pe.set_dword_at_rva(des_output_addr[i], des_output_value[i] ^ cipherxor)
	print "DES output value " + str(i) + ": " + hex(des_output_value[i] ^ cipherxor)[:-1]

pe.write(filename="JonahHex.exe")