목록분류 전체보기 (553)
Self-Improvement
http://reversing.kr/challenge.php 에서 Easy_CrackMe.exe를 다운받아 준다. 해당 프로그램을 실행하면 입력할 수 있는 메시지 박스와 입력 값이 패스워드와 같지 않다면 "Incorrect Password" 메시지 창이 뜨게 된다. 이 점으로 볼때 패스워드를 찾아야 한다는 것을 알 수 있다. 프로그램을 x32dbg로 열어준다. EIP는 00401188주소에서 시작하며 친절하게 EntryPoint라고 되어있다. 2가지 접근법이 존재한다. 1. 프로그램을 실행했을 때 메시지 박스가 뜬것을 감안하여 F8로 하나씩 실행하면서 메시지 박스를 호출하는 곳을 찾아내고 패스워드를 비교하는 곳도 찾아내어 분석한다. 2. 패스워드가 올바르지 않다고 메시지가 뜬 문자열을 찾은 후 해당 문자..
CASE 구문에서 배운 소스코드의 Main 함수에서 입력값에 따라 [one], [two]...로 문자열을 출력하게 된다. "[one]" 문자열 대신 다른 걸로 출력하게 문자열을 패치해본다. "[one]" 문자열이 저장된 메모리의 7E7B6C 주소로 이동하여 [바이너리패치 - 패치]로 문자열을 변경해준다. 만약의 상황을 위해 패치할때 크기 유지를 체크한 뒤 해준다. "[one]"을 "noONE"으로 패치한 후 확인해보면 정상적으로 변경되어 있다. 만약 기존의 글자보다 길에 써야할 경우에는 이 프로그램이 침범하지 않을 사용하지 않을 공간에 작성한 뒤 명령어를 패치해준다. 위 007E9444 주소를 기존 "[two]" 문자열 주소를 불러오는 어셈블 명령어를 007E9444주소로 변경한다. Space를 누르거나..
x64dbg를 sourceforge에서 다운로드 받았을때 snowman 기능이 존재하지 않았다. https://github.com/x64dbg/snowman/releases/tag/plugin-v1 x64dbg/snowman Snowman Decompiler for x64dbg (LOOKING FOR MAINTAINER) - x64dbg/snowman github.com snowman.dp32, snowman.dp64를 다운로드 해준다. 각 파일을 x32dbg, x64dbg plugin 폴더에 넣어준 뒤 실행하면 snowman 기능을 사용할 수 있다.
CASE구문 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include int main() { int n; printf("INput number:"); scanf_s(" %d",&n); printf("before switch statement\n"); switch (n) { case 0:printf("[zero]"); break; case 1:printf("[one]"); break; case 2:printf("[two]"); break; case 3:printf("[three]"); break; case 4:printf("[four]"); break; case 5:printf("[five]"); break; ..
소스코드1 1 2 3 4 5 6 7 #include int main() { printf("hellow world!!"); return 0; } cs Visual Studio로 컴파일을 해준뒤 x96dbg로 열어주면 hellow world를 출력하는 main과 printf를 찾지 못하며 이상한? 곳에서 시작을한다. 이는 컴파일러가 기본적인 구성을 확인하기 위한 절차로 컴파일한 프로그램, 버전 등에 상이하게 되어있다. 위의 소스코드의 어셈블리어를 볼라면 Main을 찾아 BP을 걸어준다. 그 다음 F9를 눌러 BP를 설정한 곳까지 진행을 해준 뒤 F7로 진입해준다. 진입을 하면 드디어 우리가 찾는 소스코드의 어셈블리어를 볼 수 있다. 여기서는 F8로 한 라인씩 진행을 해줘도 된다. 해당 어셈블리 코드에서 스택..
*MOV 옵코드 MOV는 단지 값을 넣는 역할을 한다. 예를 들면 MOV eax, 1은 eax에 1을 넣는 코드가 되고, MOV ebx, ecx는 ebx에 ecx를 넣는 코드가 된다. *LEA LEA는 MOV와 다르게 단순하다. MOV는 값을 가져오는 것이라면 LEA는 주소를 가져온다. 따라서 LEA는 가져올 src 오퍼랜드가 주소라는 의미로 대부분 []로 둘러싸여 있다. *예시 esi : 0x401000 *esi : 5640ec83 esp+8 : 0x13ff40 *(esp+8) : 33 1. lea eax, dword ptr ds:[esi] = esi가 0x401000이므로 eax에는 0x401000이 들어온다. 2. mov eax, dword ptr ds:[esi] = esi가 0x401000이므로 ..
MySQL select left((select table_name from information_schema.tables limit 1),2) select right((select table_name from information_schema.tables limit 1),2) select length((select table_name from information_schema.tables limit 1)) MSSQL select LEFT((select top 1 table_name from information_schema.tables),2) select right((select top 1 table_name from information_schema.tables),2) select len((select..
Sleep select sleep(3) select if(1=1,sleep(3),2) Benchmark benchmark(돌릴 횟수, 돌릴함수) 함수는 돌릴 함수에 대하여 몇번의 횟수를 반복하는지를 나타냄 이 방식을 통해 Time SQLi가 가능함 select benchmark(1000000,md5(1)) select if(1=1,benchmark(1000000,md5(1)),2) Heavy Query select count(*) from information_schema.tables tab1, information_schema.tables tab2, information_schema.tables tab3 select if(1=1, (select count(*) from information_schema..
* SELECT 0x457578 MySQL MSSQL Oracle X * String 이어붙히기 MySQL MSSQL Oracle p.s. MySQL
IF Statements MySQL IF(condition,true-part,false-part) MSSQL IF condition true-part ELSE false-part Oracle IF condition THEN true-part; ELSE false-part; END IF; END; 제약이 많은 IF문 보단 CASE문이 유용하며 Oracle은 PL/SQL에서 사용이 가능한것으로 보임 MySQL select if(1=1, 1,2) select if ((select substr(version(),1,1))=5,1,2) select if (1=1,(select version()),2) select if ((select length(table_name) from information_schema.t..