pazzoide_
09-08-2009, 11:23
ragazzi salve a tutti ho un problema vorri capire un file dissemblato con ida e da li ricostruire i comandi e metterli in un utility creata in vb6 mi date una mano?
pazzoide_
09-08-2009, 14:27
dai ragazzi mi dite che sigifica questo?
RAM:203082A4 .set var_108, -0x108
RAM:203082A4 .set var_104, -0x104
RAM:203082A4 .set var_100, -0x100
RAM:203082A4 .set var_FC, -0xFC
RAM:203082A4 .set var_F8, -0xF8
RAM:203082A4 .set var_E0, -0xE0
RAM:203082A4 .set var_88, -0x88
RAM:203082A4 .set var_10, -0x10
RAM:203082A4 .set var_C, -0xC
RAM:203082A4 .set var_8, -8
RAM:203082A4 .set var_4, -4
RAM:203082A4 .set arg_4, 4
RAM:203082A4
RAM:203082A4 stwu %sp, -0x110(%sp) # Store Word with Update
RAM:203082A8 mflr %r0 # Move from link register
RAM:203082AC stw %r28, 0x110+var_10(%sp) # Store Word
RAM:203082B0 stw %r29, 0x110+var_C(%sp) # Store Word
RAM:203082B4 stw %r30, 0x110+var_8(%sp) # Store Word
RAM:203082B8 stw %r31, 0x110+var_4(%sp) # Store Word
RAM:203082BC stw %r0, 0x110+arg_4(%sp) # Store Word
RAM:203082C0 mr %r31, %r3 # Move Register
RAM:203082C4 li %r29, 0 # Load Immediate
RAM:203082C8 li %r11, 0 # Load Immediate
RAM:203082CC stw %r11, 0x110+var_108(%sp) # Store Word
RAM:203082D0 li %r10, 0 # Load Immediate
RAM:203082D4 stw %r10, 0x110+var_104(%sp) # Store Word
RAM:203082D8 addi %r9, %sp, 0x110+var_E0 # Add Immediate
RAM:203082DC stw %r9, 0x110+var_100(%sp) # Store Word
RAM:203082E0 li %r12, 0 # Load Immediate
RAM:203082E4 stb %r12, 0x110+var_FC(%sp) # Store Byte
RAM:203082E8 li %r11, 2 # Load Immediate
RAM:203082EC stw %r11, 0xC8(%r31) # Store Word
RAM:203082F0 addi %r4, %sp, 0x110+var_100 # Add Immediate
RAM:203082F4 lis %r5, ((dword_20308650+0x10000)@h) # 0xD151D000
RAM:203082F8 subi %r5, %r5, 0x79B0 # dword_20308650 # Subtract Immediate
RAM:203082FC mr %r3, %r31 # Move Register
RAM:20308300 bl send_a0ca0000 # Branch
RAM:20308304 mr %r30, %r3 # Move Register
RAM:20308308 cmpwi %r30, 0 # Compare Word Immediate
RAM:2030830C bne loc_20308410 # Branch if not equal
RAM:20308310 lbz %r12, 0x110+var_FC(%sp) # Load Byte and Zero
RAM:20308314 cmpwi %r12, 0 # Compare Word Immediate
RAM:20308318 beq loc_20308410 # Branch if equal
RAM:2030831C bl sub_202C5E1C # Branch
RAM:20308320 addi %r4, %sp, 0x110+var_88 # Add Immediate
RAM:20308324 addi %r7, %sp, 0x110+var_108 # Add Immediate
RAM:20308328 addi %r8, %sp, 0x110+var_104 # Add Immediate
RAM:2030832C li %r5, 0x78 # 'x' # Load Immediate
RAM:20308330 li %r6, 1 # Load Immediate
RAM:20308334 bl sub_202C60A8 # Branch
RAM:20308338 mr %r29, %r3 # Move Register
RAM:2030833C clrlwi %r11, %r29, 24 # Clear Left Immediate
RAM:20308340 cmpwi %r11, 0 # Compare Word Immediate
RAM:20308344 beq loc_203083A8 # Branch if equal
RAM:20308348 addi %r3, %r31, 0xD4 # Add Immediate
RAM:2030834C addi %r4, %sp, 0x110+var_E0 # Add Immediate
RAM:20308350 addi %r5, %sp, 0x110+var_F8 # Add Immediate
RAM:20308354 bl sub_202F45AC # Branch
RAM:20308358 mr %r29, %r3 # Move Register
RAM:2030835C clrlwi %r9, %r29, 24 # Clear Left Immediate
RAM:20308360 cmpwi %r9, 0 # Compare Word Immediate
RAM:20308364 beq loc_2030839C # Branch if equal
RAM:20308368 addi %r4, %sp, 0x110+var_F8 # Add Immediate
RAM:2030836C mr %r3, %r31 # Move Register
RAM:20308370 bl sub_202CFC94 # Branch
RAM:20308374 lwz %r11, 0x368(%r31) # Load Word and Zero
RAM:20308378 lwz %r10, 0x110+var_108(%sp) # Load Word and Zero
RAM:2030837C cmplw %r11, %r10 # Compare Logical Word
RAM:20308380 bne loc_20308394 # Branch if not equal
RAM:20308384 lwz %r12, 0x390(%r31) # Load Word and Zero
RAM:20308388 lwz %r11, 0x110+var_104(%sp) # Load Word and Zero
RAM:2030838C cmplw %r12, %r11 # Compare Logical Word
RAM:20308390 beq loc_203083A8 # Branch if equal
:mbe: Oddio
dovresti prima sapere quali registri sono adibiti a ricevere i vari parametri delle funzioni e creare una specie di mappa dello stack... a quanto ricordo le funzioni vengono chiamate con store dei parametri in appositi registri, store della posizione attuale pure in un apposito registro, jump all'indirizzo della funzione, esecuzione da lì, store del risultato nell'ennesimo apposito registro, read dello stack pointer dal valore precedentemente memorizzato e nuovo jump.
Il registro %sp a questo punto credo stia per stack pointer, ovvero il punto che marca "dove sei ora" nell'esecuzione del programma, i vari %r## saranno gli altri registri, numerati... per il resto mi pare un compito piuttosto ingrato :eek:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.