replace 입력된 값에 특정 연산을 한뒤에 그 값을 주소로 하여 참조된 곳에 nop 코드로 치환함. 목적 자체가 correct 띄우는거니 얼토당토없이 점프하는 곳(0x401071)을 nop로 만드는 것을 목적으로 하여 풀어보면 됨. 일단 몇번 해보니까 사용자가 입력한 값 + 0x601605CB를 한다는 것을 알게됨 그리고 그 값을 401071로 바꿔야하니까 0x601605cb + ? = 0x401071를 유추할 수 있음. FFFF FFFF - 6016 05CB = 9FE9 FA34 9FE9 FA34 + 0040 1071 = A02A 0AA5 근데 주소를 병신같이해서그런지 00401072로 해야 됨. 더보기 ransomeware upx -d -o[output] [input] 이렇게해야 되더라. 퍼미션디나이드 왜뜨나했네 아 이거 이뮤니티로 까보면 주석 다 적어놨음 핵심부분만 설명해주면 key[n]랑 0xff를 xor하고 plaintext[n]이랑 또 xor한다고 보면될듯 b = bytearray(open('test', 'rb').read())for i in range(len(b)): b[i] ^= 0xffopen('result', 'wb').write(b)이게 xor 하는 코드 key는 반복으로 계속.. 그래서 key를 알기위해선 걍 0xff로 파일 한번 xor시켜주면 pe 특성상 null로 되어있는 공간에 key가 노출됨 letsplaychess가 key였고 복구된 파일을 열어보면 Key -> 어쩌고저쩌고 라고 나온다 더보기 imageprc 그 사용자한테 입력받은 이미지랑 리소스에 저장된 이미지랑 1바이트씩 비교함. 비교 대상 주소는 사용자 이미지([ECX])고 저장된 리소스 이미지([ECX+EAX])라는걸 확인할 수 있었음. 이미지 추출하려고 [ECX+EAX] 영역 덤프(메모리)한 다음에 BMP헤더붙이면 끝 더보기 이전 1 2 3 4 5 6 7 ··· 27 다음