본문 바로가기

Revere Engineering

IDA Pro 에서 변수에 숫자 직접 넣기..

아래와 IDA Pro에서 C언어로 변환해서 본 화면 입니다.

아래와 같이 변수에 변수나,연산식을 대입 하는경우...

절대값을 넣기 원할 경우가 있습니다.

다시 어셈 코드로 보면.. 아래와 같은데..


위에 절대값을 넣어주는 어셈 명령을 가져다가 넣어줘도..

이런식으로 에러가 나서 사용을 할수가 없습니다..

바이트로 강제 수정해 줘야 하는데..

우선 명령어 자릿수가 문제 이니.... 자릿수를 늘려줘야 합니다.


eax에 변수값 넣어주고 eax를 다시 넣어주는 방식이니

위에 부분에 eax 에 변수값 넣어주는 부분을 절대 값 넣어주게 수정해도 되고..

아예 두 라인을 한번에 수정해 줘도 됩니다..


위와같이 하면 30을 변수에 넣는 효과가 있습니다..


그리고 두 명령어를 한번에 처리하려면...

IDA Pro 에 패치를 사용 할경우..


우선 명령어를 모두 nop 로 지워 줍니다.

그리고..


변수에 절대값을 넣는 셈플을 보면 아래와 같이 movhex 값이 C7 입니다.

변수에 eax를 넣는경우 셈플을 보면 아래와 같이 movhex 값이 89 입니다.

이걸 조합해서 바이트값을 만들어서 넣어주면 됩니다.

절대값을 넣을거니 C7 이고 뒤에 6바이트가 변수 자릿수 그리고 뒤에 4바이트가 값..


C7 <- mov

84 24 F0 01 00 00 <- Addr

01 00 00 00 <- Value


C7 84 24 F0 01 00 00 01 00 00 00


이제 Change byte 를 해서...


원래 값

90 90 90 90 90 90 90 90 90 90 90 90 90 90 48 8B


수정할

C7 84 24 F0 01 00 00 01 00 00 00 90 90 90 48 8B


이렇게 자릿수를 맞쳐서 넣어줍니다.


변수에 값을 직접 쓸경우 바이트를 수정해 줘야 하니..

귀찮으면 eax 값을 넣었다가 그걸 사용해도 무방하다.

Eax 값을 변수에 넣는건 어셈 패치 입력으로도 가능 하니..


위에 한줄 코드를 두줄로 풀어서 쓰면 된다.... 중간에 nop는 그냥 넣은거임~


리버싱을 할때...정해진 바이트에 명령어를 조작 해야 하므로...

소스코드상에 필요 없는 부분을 nop 처리해서 공간을 만들어주고...

자릿수에 맞쳐서 명령어를 넣어주면....jmp를 하거나 offs 를 바꿔주는것 보단 손쉽게 조작이 가능 하겠죠..


그냥 참고하세요..