전체 글

하고싶은 걸 하는 개발일기 겸 일상일기
시리얼이 5B134977135E7D13 일때 Name이 무엇인지 알아내면 된다. 프로그램 실행모습  IDA참조하는 곳으로 가보자여기서 유심히 보아야 할 곳이 보인다.Name을 입력받아서 문자열 길이만큼 반복문을 돌린다. i 가 3이 되면 0으로 초기화 해주고문자열[i] ^ v7[i-1] , 즉 xor 연산을 해줘 버퍼에 저장해주는듯 하다.그리고 시리얼과 연산된 버퍼를 비교해 분기한다.IDA에서 더 알아보기엔 무리가 있으니 x32Dbg에 붙여보자  x32Dbg위 IDA의 if ( i >= 3) i = 0; 이 있었다시피cmp esi, 3으로 비교를 해주고 xor esi, esi를 통해 0으로 초기화 해주는게 보인다.Name이 입력되면 [esp +10] 부터 차례로 10, 20, 30 을 넣어주고 있다.ec..
OEP를 찾으라고 한다.  프로그램 실행모습폼 하나만 덩그러니 띄워진다. PEID로 보자무엇으로 패킹된지 보이지 않는다. 열어서 직접보자 x32Dbg열어보니 upx나 aspack에서 보이는 pushad 가 보이지 않는걸 봐선 따로 압축, 복호화를 하는거 같은데... 내리면서 루틴이 끝나는 곳에 jmp가 있는지 보자점프하는 곳이 보인다. 이동해보면OEP가 나왔다.  너무 야매로 푼건가.. 싶기도 한데 뭐..
Reversing.kr 의 문제들은 CodeEngn과 다르게 설명이나 힌트없이 프로그램만 딸랑 있어 더욱 집중을 요하는듯 하다. 프로그램 실행모습시리얼을 찾아주면 될듯하다.  IDA IDA에 올려 훑어보았다. 성공 실패 문자열과 위로 비교하는 구문들이 계속해 보인다. x32Dbg아무값이나 넣어주었다.입력된 문자열의 두번째 글자와 0x61 (a) 를 비교한다. 두번째 글자를 a로 바꿔주고 다시 진행해본다401150 으로 들어와 살펴보니.입력받은 문자열의 3번째부터 5y가 맞는지 검사한다. 바꿔주고 다시 진행반복문을 돌며 한글자씩 비교한다. 다시바꿔주고 진행입력받은 문자열의 첫번째글자가 0x45인지 비교한다. 제일 앞에 E를 넣어주고 다시 진행하면정답 !
Packing프로그램을 보호하는 방법중 하나입니다. 실행파일을 암호화, 압축을 하는 방법을 칭합니다.압축후 암호화를 할 때 다른 섹션을 만들어 그 곳에 복호화 알고리즘을 저장하며, 실행 시 암호화된 데이터를 복호화 후 실행합니다. Themida & Winlicence - 현존하는 가장 강력한 패커중 하나입니다. anti VM, anti Dump, anti Debug, EP 섞기, 리소스 암호화등 수많은 기능들을 제공하며 더미자 제작사에서는 라이센스 관리기능을 추가한 윈라이센스 또한 존재하고 있습니다. 수많은 상용프로그램들에 사용되고 있으며 카카오톡과 같은 프로그램또한 더미다 패커를 사용합니다. UPX- 가벼우며 포맷을 다양하게 지원하는동시에 프리웨어입니다. 패킹시 upx0, upx1 섹션이 생성되고 up..
메모리 비교보호할 메모리를 읽어봐 비교합니다.클라이언트에서 int형 변수에 17을 넣어주고 출력해줬었습니다.push 11로 17을 넣어주고 있습니다.push 30으로 변조하게되면 감지하게 됩니다. CheckRemoteDebuggerPresentIsDebuggerPresent 함수와 동일한 역할을 합니다만, 현재 시점을 기준으로 값을 불러옵니다.   난독화코드를 읽기 어렵게 만들어 분석을 어렵게 하는 기술입니다.변수명, 쓸모없는 코드등을 이용해 읽기 어렵게 만듭니다.암호화와는 다른 개념이며, 암호화는 키값이 있어야 볼 수 있습니다.  PE Header메모리 상에 존재하는 PE Header를 지워 덤핑을 방해합니다. Junk Code / Dummy Code실제로는 아무 역할도 하지 않는 코드입니다만, 코드 ..
브레이크포인트실행중인 대상 프로세스를 디버깅을위해 코드진행을 의도적으로 멈추게 하는걸 뜻합니다.멈춘시점의 파라미터, 변수의 값, 레지스터 등을 알 수 있으며, 소프트웨어 브레이크포인트, 하드웨어 브레이크포인트, 메모리 브레이크포인트로 3종류가 존재합니다.   SoftwareBreakPointINT 3 인스트럭션은 Software BP로 많이 사용되는 BP중 하나이며 횟수 제한이 없습니다만 코드변경이 있기에 crc체크를 하는 프로그램에서는 걸리게됩니다.만약 디버깅 중이라면 해당 인스트럭션이 실행될 때 BP가 트리거 되며 자연스럽게 BP로 인식해 넘어가지만아닐때는 예외가 발생하며 예외구문에 걸리게 됩니다. 디버거에서 OPCODE는 CC로 설정됩니다.INT 41 명령어는 커널 디버거를 탐지할 때 사용되며, 보..
들어가며안티리버싱 테크닉을 이용해 안티치트솔루션 (게임가드 같은)을 만드는 걸 간단히 다뤄보겠습니다.유저모드 (ring3) 위주이며 커널모드 (ring0)의 드라이버등은 다루지 않습니다.  리버싱Reverse Engineering 을 줄여 Reversing으로 흔히 말하며, RE, 역공학, RCE 등으로 불리기도 합니다. 뜻대로 역으로 분석하는걸 칭하며, 대상으로는 exe, dll, sys 파일 등이 있습니다. 이러한 실행파일들을 대상으로 코드를 분석해 프로그램이 어떤 기능을 하는지 함수는 어떤 역할인지를 알아내는 작업하며, 프로그래밍 언어가 하나가 아닌만큼 여러 언어로 만들어졌을테니 어셈블리어를 알아두어야 합니다.  안티리버싱말 그대로 리버싱을 어렵게 만드는 작업입니다. 난독화, 가상화하여 코드 읽기의..
https://imoracle.tistory.com/50 [Game] 지뢰찾기 월핵 제작 - 1 -https://imoracle.tistory.com/51 [Game] 지뢰찾기 월핵 제작 - 2 -이어서이제 메모리를 읽어와서, 2차원 배열에 값을 넣어주어야 합니다. 프로그램을 열어줍니다. 실시간으로 볼 수 있게 띄워주겠습니다.imoracle.tistory.com이어서이제 메모리를 읽어와서, 2차원 배열에 값을 넣어주어야 합니다. 프로그램을 열어줍니다. 실시간으로 볼 수 있게 띄워주겠습니다.전 포스팅에서 봤다시피 0x20 은 32입니다.시작주소 + j 를 해주며 다음칸 [열]로 넘어갑니다.i * 32를 해주며 시작주소에서 다음시작주소[행]로 넘어갑니다.  그리고 만들어둔 data[9, 9] 에 값을 넣어주..
https://imoracle.tistory.com/51 [Game] 지뢰찾기 월핵 제작 - 2 -이어서이제 메모리를 읽어와서, 2차원 배열에 값을 넣어주어야 합니다. 프로그램을 열어줍니다. 실시간으로 볼 수 있게 띄워주겠습니다.전 포스팅에서 봤다시피 0x20 은 32입니다.시작주소 + jimoracle.tistory.com 들어가며  지뢰의 위치를 찾아 그려주는 프로그램을 만들어 보겠습니다.C#을 이용해서 만들어 보겠습니다. 시작  지금와서 보니 왜 이걸 Decimal로 보고 있었을까 싶습니다.어쨌든 143 은 0x8F 입니다. 16은 0x10 입니다.0x10 을 기점으로 행의 시작과 끝을 구분합니다. 사실 위의 사진을 캡쳐 할때만해도 아무생각없이 그냥 크기대로 들어가는줄 알고 진행하다2차원 배열에 값..
https://imoracle.tistory.com/48 [Assaultcube] FPS게임 분석 및 핵 제작 - 1 -https://imoracle.tistory.com/49 [Assaultcube] FPS게임 분석 및 핵 제작 - 2 -핵툴 개발 리버스 엔지니어링을 통해 동작중인 게임의 메모리주소를 얻은 후 프로세스에 접근하는 방식은 내부접근과 외부접근imoracle.tistory.com 핵툴 개발 리버스 엔지니어링을 통해 동작중인 게임의 메모리주소를 얻은 후 프로세스에 접근하는 방식은 내부접근과 외부접근으로 두가지의 방식이 존재합니다.Internal (내부접근)- Process에 DLL을 Injection 하는 DLL-Injection 기법을 사용합니다. 직접적으로 주입하므로 메모리에 직접 접근이 ..
https://imoracle.tistory.com/49 [Assaultcube] FPS게임 분석 및 핵 제작 - 2 -핵툴 개발 리버스 엔지니어링을 통해 동작중인 게임의 메모리주소를 얻은 후 프로세스에 접근하는 방식은 내부접근과 외부접근으로 두가지의 방식이 존재합니다.Internal (내부접근)- Process에 DLLimoracle.tistory.com들어가며 메모리해킹은 특히 게임분야에 사용되며, 유저들에게 피해를 입히는 기술로 사용됩니다.이러한 해킹프로그램을 통칭 치트 또는 핵이라 부릅니다.월핵, 맵핵, 스피드핵, 에임봇, 워프 등이 포함됩니다. 주로 사용되는 언어는 C/C++, C#, Delphi 가 있고, 매크로의 경우 AutoHotKey가 있습니다. 선행지식으로는 Assembly : 분석할 ..
정답은 무엇인가 라고 물어온다. 프로그램 실행화면 IDA에 올리니 디컴파일못하겠다고 칭얼거려.. x32Dbg에 올려보자 x32Dbg문자열을 찾아주고 밑에 call 부분은 printf 겠쥬?안으로 타고들어오니 401e95 부분에서 화면에 출력해주는 군요402010 은 scanf 호출 부분입니다.402010에 브레이크포인트를 걸고 진행하니 바로 꺼져버리는군요.그래서 바로 밑인 004012d7에 브레이크포인트를 걸고 진행했습니다.Stepover로 진행하던도중 무한루프에 갇혀버려서 00401361 부분의 jne -> je로 바꿔주며 탈출했습니다.그러다 call edx를 만나니 꺼져버리더군요. BP를 걸고 따라 들어가봅시다.한글자씩 비교하고 있었군요. CRAAACKED! 를 넣어주면 성공
시유리
안녕 ! 그리고 안녕...