목록Hacking/Reverse Engineering (20)
'll Hacker
일부 운영체제나 상용 프로그램은 제품을 활성화하기 위해 시리얼 코드나 제품키를 요구하는 경우가 있음. 이용자가 제품키를 입력하면, 키가 검증되는 과정을 불법적으로 리버싱하여 우회하거나 올바른 제품키를 생성하는 행위를 크래킹이라고 부름일반적으로 이용자로부터 어떠한 입력값을 받고 그 입력값이 정답인지 아닌지를 검증하는 프로그램.목표는 입력값이 검증되는 과정을 리버스 엔지니어링으로 분석하여 정답이 되는 입력값을 찾아야함. Step1. 프로젝트 생성 및 코드 브라우저 실행 Step2. 동작 구조 분석Language ID : x86 아키텍처 64비트 명령어집합(Instruction Set)Compiler ID : gcc로 컴파일되었음.Executable Format을 통해 해당 파일이 Executable and ..
문제 설명어셈블리 언어에 대한 지식이 있으시다면 이 문제는 쉽게 해결할 수 있는 아주 간단한 문제입니다.필요한 정보만을 찾아 플래그를 획득해주세요. step1. main(or start)함수 분석설명)위에 if문은 별로 중요하지 않은 것 같음strlen( ) 함수와 check_password( )를 분석해봐야될 것 같다. 그리고 enc_flag는 플래그가 암호화된 상태인가라고도 생각해봤다.여기서 check_password를 잘 구현해야될 것 같다.step2. main 내부 함수 분석1) strlen 함수 호출문자열 길이 계산 코드 2) check_password 함수이 함수는 두 바이트 배열(a3과 a4)의 내용을 반복적으로 XOR 연산하고, 그 결과를 초기 값 a2에 누적하는 작업을 수행합니다.루프는..
https://dreamhack.io/wargame/challenges/672 Collect MeDescription 이 문제에서 주어지는 프로그램은 이름이 func_n() 형태인 함수들을 가지고 있습니다. func_0()부터 func_927()까지 총 928개 함수가 있습니다. 각 함수는 char형 지역 변수 1개씩을 가지고 있습dreamhack.io 푸는중
https://dreamhack.io/wargame/challenges/92 Secure MailDescription 중요한 정보가 적혀있는 보안 메일을 발견하였습니다. 보안 메일의 비밀번호는 생년월일 6자리인 것으로 파악되나, 저희는 비밀번호 정보를 가지고 있지 않습니다. 비밀번호를 알아내dreamhack.io 이미지에 난독화되어있는 메일을 확인할 수 있는데생년월일이면 브루트 포스해도 괜찮을 것 같다.하지만 나는 자바스크립트 코드를 모르기 때문에남의 블로그 브루트포싱하는 자바스크립트를 분석할 것이다.(자바스크립트 공부⭐) window.alert = function ( text ) { console.log( 'tried to alert: ' + text ); return true; };위 코드는 웹 페이..
https://dreamhack.io/wargame/challenges/22 rev-basic-8Reversing Basic Challenge #8 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io step1. main 함수 분석입력을 받고, 해당 값이 맞으면 "Correct" 틀리면 "Wrong" 출력 step2. main 함수 내부 함수 분석sub_140001000함수 if문에 (unsigned __int8)(-5**(_BYTE *)(a1+i)) != byte_140003000[i]가 거짓이겠끔 파이썬을 구현해줘야함 step3. 역연산unsigne..
https://dreamhack.io/wargame/challenges/20 rev-basic-6Reversing Basic Challenge #6 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io step1. main함수 분석입력하고 입력값이 맞으면 Correct, 틀리면 Wrong 출력하는 함수이다. step2. main 내부 함수 분석sub_140001000함수8비트 값을 byte_140003020 배열의 인덱스로 사용하고 있음. 해당 인덱스 위치에서 값을 가져옴byte_140003020 data는 아래와 같음byte_140003000은 0~18..
step1. main 함수 분석알맞은 입력을 한다면 Correct 출력되고, 올바르지 않다면 Wrong이다. step2. main 내부 함수 분석__int64 __fastcall sub_140001000(__int64 a1){ int i; // [rsp+0h] [rbp-18h] for ( i = 0; (unsigned __int64)i > 4)) != byte_140003000[i] ) return 0i64; } return 1i64;}if문 중심으로 보쟈지피티 출처>>>a1 주소로부터 i 바이트 떨어진 위치의 값을 _BYTE로 읽어옵니다.읽어온 값을 16배(읽어온 값을 4비트 오른쪽으로 시프트(>> 4)합니다.두 연산의 결과를 OR 연산(|)으로 결합합니다.결합된 결과를 byte_140..
step1. main 함수 분석input 문자열 출력하고입력을 받는 것으로 보인다.입력받은게 맞다면 correct 틀리면 wrong을 출력한다.sub_140001210과 sub_140001000을 알아보자. Step2. main 내부 함수 분석1. sub_140001210 함수 -> scanf 같음 2. sub_140001000 함수⭐이거 중요한 함수일듯 aC 배열의 4 * i 번째 위치에 있는 4바이트를 DWORD로 읽어옵니다.a1 주소로부터 i만큼 떨어진 위치의 1바이트를 unsigned __int8 타입으로 읽어옵니다.이 두 값을 비교합니다.만약 값이 같지 않으면 0을 반환합니다.aC배열이 중요한 것 같아서 들어가보았다.엇 저기에 있는 문자인가 해서DH{Comp4re_the_arr4y}이렇게 ..