C#으로 만들어진 프로그램 중에서 CryptoStream을 통해 암호화된 문자열을 복호화해야되는 경우가 간혹 있다. 그럴때 아래코드를 통해 빠르게 해결해보도록 하자. ( 자세한 설명은 하지 않겠다. ) 여기서 중요한점은 Mode와 Padding은 문제마다 다르니 꼭 확인하고 수정해야한다!!! 추가로 Key도 문제마다 다르니 꼭 확인하고 수정해야한다. 그러나 무조건 8글자인건 동일!! byte[] 와 String에대한 처리에도 익숙해지자. String → byte[] ASCIIEncoding.ASCII.GetBytes("ABCD"); Encoding.UTF8.GetBytes("ABCD"); byte[] → String Encoding.UTF8.GetString(byte[]); 코드 using System;..
우선 dll을 OllyDBG에 올린후, Debugging options에서 Break on new module (DLL)을 설정한다. 그렇게 F9를 통해 진행하다보면 내가 원하는 DLL이 올라오는 순간이 있다. 그 때 그 주소를 찾아가서 원하는 주소를 찾는다. ( 여기서는 스트링 탐색 기능을 사용했다. ) 그리고 내가 바로 넘어가고싶은 함수의 시작부에 New Origin here을 설정한다. 그러면 아래 사진과 같이 EIP가 해당 함수로 넘어오는 것을 확인할 수 있다. x64dbg에도 "여기를 새로운 원점으로지정" 이라는 옵션이 존재한다. 결과적으로 dll만으로는 접근할 수 없었던 포인트에 접근해 Key값을 찾아낼 수 있었다.
Windows Message Loop ? 윈도우즈 프로그램에서 메세지를 읽어들이고, "윈도우 프로시저"에 메세지를 전달하는 역할 Winodws Message Loop는 윈도우즈 기반 GUI 프로그램에 반드시 포함되는 루틴이다. (엄격하지는 않고 수정도 가능하지만 유사한 기능을하는 루틴이 반드시 있어야한다.) 기본적으로 아래 그림과 같이 구성된다. 사용자가 수정할 수 있어서 조금씩 차이가 있을 수 있다. 윈도우즈 시스템은 각각 프로세스에 대해서 개별적인 메세지 큐를 할당한다. 메세지 발생시 운영체제가 해당 프로세스의 메세지 큐에 메세지늘 넣는다. (스스로 추가도 가능) 프로세스는 자신의 메세지 큐에서 메세지를 지속적으로 읽어들이며 대응하는 함수로 메세지를 전달한다. 위 Windows Message Loop..