ksj312920의 등록된 링크

 ksj312920로 등록된 네이버 블로그 포스트 수는 85건입니다.

코드엔진-malware01 [내부링크]

요즘은 이것저것 해보고싶어서 포너블을 더 하는것보다 여러가지를 더 탐색을 해보는게 좋을것같아서 codeengn에 malware 파트를 해보려고 한다.앞에 리버싱 문제는 serial값만 찾아내는게 지루해서.... malware로 점프해서 실질적인 공격 코드는 어떻게 분석하는지 알아보고싶다.또 malware외에 web에 대해 더 알아보고 싶어서 웹 기본 개발 공부를 해보려고 한다. js보다 최근에 떡상하고있는 C#을 이용한 프래임워크?인 ASP.NET CORE를 먼저 해볼 생각이다.이제 각설하고 시작하자.문제주어진 코드를 분석하고 어떤 공격방법인지 알아내라는 문제다.소스코드처음에 ipHeader 뭐시기 targetIP뭐시기 등등 있는걸 보니 공격 환경은 네트워크.......

코드엔진 - malware02 [내부링크]

문제소스코드이번에도 나는 노베이스이니 한줄 한줄씩 천천히여기서 내가 아는 단어라고는 xml과 sql뿐이다. 초면인 DAV도 보이고 searchrequest도 보인다.;;;아마 웹 홈페이지에 body부분인것 같다. DAV가 뭔지 검색해보자.xml이 보여서 검색어를 web DAV라고 검색해봤다.뭐 이렇다고 한다.그 다음은 2번째 줄에 sql 태그? g태그? 부분이다.내가 sql 문법을 다 아는건 아니지만 저 라인에 있는 sql 구문은 대충 해석할 수 있다.DAV:displayname을 찾는데 scope()라는 곳에서 찾는다. = scope()에 있는 DAV:displayname을 출력? 추출?한다.대충 이부분만 보면 WebDAV라는 것을 타겟으로 하는것 같다.왜?sql 대상이 DAV여서 이렇게 짐작.......

코드엔진 - malware03 [내부링크]

문제소스 코드의 일부분인데 이 코드가 뭘하는 친구인가?소스코드나는 리버싱이 매우 기초적인 부분밖에 몰라서;; 저거 대충 보고 설마? 암호화? 혹은 패킹? 같은 느낌이였는데 리턴값이 이상해서 아닌거같다;;이리 저리 생각해봤지만 나의 얕은 지식으로는 안될것같아서 결국... 라업을 봤다....라업을 보니깐 체크섬 이라는 것을 통과?하기 위한 작업이라고 한다.좀 더 구체적으로 무결성 인증을 통과하기 위한 작업같다.그러면 이번에는 소스코드를 먼저 분석하고 체크섬이 뭔지에 대해서 알아보자...소스코드는 앞에 1,2번 문제보다 훨씬 간단하다.그럼 이제 체크섬이 뭔지 공부하자.체크섬체크섬은 데이터의 무결성을 체크하.......

코드엔진 - malware04 [내부링크]

문제이번에는 문제가 주어진게 아니라 상황이 주어졌다.특정 웹 환경 = APM 환경의 사이트에서 SQLi 취약점이 존재해서 공격을 당하고 있다고 한다.이 환경에서 sqli를 막으려면 설정 파일에서 어떤 옵션을 설정해야 안전한가?를 묻는 문제다.난 어떻게 접근 했는가..그냥 단순히 구글링을 했다..."php.ini sqlinjection"을 치니 첫 블로그에 바로 한가지 키워드가 나오더라magic_quotes_gpc 이 키워드가 나오더라이와 거의 자매품 수준으로 addslashes()함수도 나오더라.결국 이중에 옵션은 magic_quotes_gpc이고 이게 답이다..그런데 이 옵션은 최신 php에서는 빠졌다고 한다.아마도 우회 기법이 존재해서 그런것같다. 아.......

코드엔진 - malware05 [내부링크]

소스코드문제풀이그냥 딱 소스코드 절반정도 읽고 느낀것은 암호화 과정이라는 swag이 물씬 느껴졌다.근데 return값 이름이? encoded네? 거의 99.999999% 암호화 과정이라고 느꼈다.근데 무슨 암호화 과정인지 swag을 느껴보려 하는데 알파벳 table이 정의가 되어있다.대충 이부분을 보고 느낀것이 data를 특정 연산을 취해서 값을 구하고 그 값을 통해 table을 참조하는 것을 보고"아 이건 치환 암호화 과정이구나"하고 swag을 느껴버렸다.근데 치환 암호도 종류가 있지 않는가?배열의 크기가 64인것 하고 buffer2의 연산 결과값이 63이내의 값인것과 배열에 "+/" 이 두 값도 있는 것을보면 흔히 우리에게 익숙한 base64라.......

코드엔진 - malware06 (feat. Mutex, Semaphore) [내부링크]

소스코드문제풀이이번 문제는 단순하게 위 hex ray 어셈 코드를 읽으면 끝났었다.이 문제를 나는 Thread mutex가 뭔지 모른상태에서 답을 찾았다.그래서 이번에는 정답이 뭔지 찾고 Thread mutex가 뭔지에 대해서 알아보자.32비트라 인자 전달 확인이 매우 쉬웠고 코드도 단순해서 상당히 읽기는 쉬운 어셈 코드였다.이 부분을 보고 답이 나왔다.Thread Mutex라는 것을 찾으라 했으니 Thread를 이용하는 부분이고 Thread Mutex를 생성하는 부분이 있을거야 하면서 이 mutex를 생성하는 함수만 눈여겨 보면서 읽었다.저기 보면 "CreateMutexA"함수가 call 되는 부분이 보일 것이다.32비트니 먼저 인자를 전달하고 함수를 호출한다. 위.......

코드엔진 - malware07 [내부링크]

소스코드문제풀이소스코드? 헥스 레이가 06번 문제와 똑같다.06번에서 분석을 하고 보니 매우 쉬웠다.아마 이 부분이 메인인것 같다.위 사이트 "http://noshit.fateback.com/"에 접근하려 하는데 누가 사용중이라면 대기 모드로 들어갔다 설정되어있는 밀리세컨드 만큼 기다리고 다시 접근을 시도한다.즉 문제는 이 기다리는 밀리세컨드를 찾으라는 것이다.두갈래 길에서 false로 가는 부분이 누가 이미 자원을 사용하고 있으니 대기를 타라 하고 넘어가는 부분이고 대기를 하면 다시 접근을 하겠다는 flow이다.쯕 0x96000만큼 기다리라고 설정되어있으니 0xx96000이 답이다.

코드엔진 - malware08 [내부링크]

소스코드문제또 다른 악성코드 함수를 찾으란다.풀이.exe 파일을 탐색? 해서 특정 함수를 통해 실행시키는 부분같다.여기가 악성코드 실행 부분인가보다.여기서 한칸 더 위로 올라가보자.악성파일을 실행시키는 코드로 넘어가는 길만 있는것이 아닌 오른쪽길이 하나 더 존재했다.보니깐 ShellExcuteExA라는 함수가 보인다. 느낌상 shellscript?같은 것을 실행시켜주는 함수 같다.왜? 악성 파일을 실행시키는 부분 말고 다른 부분이 있을까를 생각을 해봤는데. 의도대로 악성코드 실행이 안되었을 때 차선책으로 ShellExcuteExA라는 함수를 통해 악성 코드를 실행시키는 부분같다.이제 loc_40261E 함수에서 test 어셈 명령어를 통해 ShellEx.......

리버싱 핵심 원리 (나뭇잎책) 읽는중인 노션 [내부링크]

https://www.notion.so/5d42a9cb3bc14ce2beceabf6ac823dbf챕터 한 바퀴 돌면 개념 정리 ㄱㄱ

DreamHack wargame 풀이수 [내부링크]

웹해킹 : 18포너블 : 35리버싱 : 10리버싱은 1도 몰라서 손도 제대로 못대겠다....포너블은 3단계가 아직은 최선인듯 좀 더 공부하자...웹해킹은 웹 개발부터 해보고 이해하고 다시 복기하자.

암호학적 해시함수 [내부링크]

노션에다가 정리해 놓아서 pdf로 올립니다.주된 내용은 암호학적 해시함수에서 다루는 "제1역상저항성" "제2역상저항성" "충돌저항성"에 대한 이야기가 있고이를 뒷받침 하기 위한 간단한 생일역설 설명이 있습니다.

코드엔진(codeengn basic11) [내부링크]

"OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오.Ex) FF35CA204000E84D000000 정답인증은 OEP+ StolenbyteEx ) 00401000FF35CA204000E84D000000"또 OEP를 찾으라니깐 패킹이 되어있구나 이제 자연스럽게 생각한다.이제 또 이전문제에 ASPack과 UPX패킹의 차이점을 보면 return구문에 ASPack은 return 0c가 있다. 이게 있나 없나를 확인하면 ASPack인지 UPX팩인지 어림잡아 짐작할수있다.PEID로 확인해보니 UPX패킹이였다.그럼 패킹되어있는 파일부터 디버깅해보자.앞선 문제와 같은 방법으로 수동 OEP주소 찾기를 해보자.앞에 9번문제였나? 그 문제도 stolen byte를 찾는거였는데 9번문제에서 말했듯이 패킹 되어있.......

코드엔진 (codeengn basic12) [내부링크]

"Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다.문제 : Key값과 + 주소영역을 찾으시오Ex) 7777777????????"이번 문제 파일은 패킹이 안되어있다.key값을 입력하고 설정된 key값과 비교해 correct or wrong을 띄어주는 프로그램이다.디버거로 보니 GetDigItemInt라는 함수가 있다 .이 함수는 우리가 키값을 입력하는 함수이다. 함수 끝에 Int라고 써져있는것을 보니 문자는 안들어가고 오로지 정수형 만 들어가는 것을 알 수 있다.그리고 위 사진의 상태는 key입력.......

코드엔진 (codeengn basic 13) [내부링크]

"정답은 무엇인가"무작정 정답을 찾으라는 문제여서 일단 당황을 먼저 하고 시작했다.일단 실행부터 해보자.입력하고 지정된 문자열과 비교후 correct or wrong을 출력해주는 프로그램같다.PEID로 먼저 까기 귀찮아서 바로 디버거로 열어봤다.그런데파일을 실행할수 없다고 하며 오류가 뜬다.이때부터 PEID로 까봤어야하는데 또 고집으로 아이다로 까보고 싶어져서 까봤다.까봤더니 Iijndael암호화 코드가 있는것을 확인했고 여기있는 코드를 이용해야 겠다고 생각을하고 이제부터 PEID를 까봤다.까보니C# .NET형식이라 나와있었다.그래서 인터넷에 C# decompiler(?)를 쳤었던것같은데 검색해보니 .NET REFLECTOR라는 프.......

코드엔진(codeengn basic14) [내부링크]

"Name이 CodeEngn 일때 Serial을 구하시오(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)Ex) 11111"파일이 UPX패킹이 되어있다.이번엔 OEP주소를 직접 안찾고 그냥 언패킹 해서 풀겠다.upx -d 커맨드를 이용해 언패킹을 했다.파일을 실행시켜보자입력 박스 2개에다 check 하는 것이 있다.값을 넣고 출력된 화면이다.그럼 이제 디버거로 확인해보자.확인해보니 GetDigItemTextA라는 함수가 2개보인다.보면 실행화면에 입력창 2개에서 입력을 받는 함수들인것같다.그럼 입려창에 CodeEngn과 10을 넣고 실행해보자.CodeEngn이라는 문자열을 넣었을때.......

SSTF2020 eat_the_pie [내부링크]

SSTF대회가 열렸었다는 소식을 들었고 SSTF문제를 다운받을수 있다고해서 일단 SSTF의 포너블 문제만 뽑아서 라업을 쓸거다.향후 리버싱을 어느정도 하면 리버싱 라업도 추가하겠다.일단 보호기법 확인부터 하자녹색으로 꽉꽉 채워져 있다.....이제 함수를 둘러보자.pwnmefunc1func2func3func4func 1,2,3,4,를 살펴보면 취약점이 발생할 부분이 하나도 없어서 패스하겠다.그럼 이제 pwnme함수를 다시보자.여기서 밖에 취약점이 나타날수 밖에 없는데? 하는 생각으로 봤다.입력을 하는 read부분이 있다.우리가 범위 밖에 값을 입력했을때 30번 줄의 코드가 실행된다.입력은 0x10만큼 받고 buf의 총 크기도 0x10이.......

CSAW CTF 2020: roppity, slithery, The Bard's Fall [내부링크]

이번에 심심해서 무슨 문제가 있나 들어가봤는데 풀 수 있는게 몇가지가 있었다.그런데 나머지는 무슨 문제인지 모르는 문제가 있었고 또 C++ 코드를 읽어보질 않아서 c++문제는 못풀었다.roppity이 문제는 그냥 단순한 bof문제이다.큰 설명은 안하겠다.slithery이번 문제는 처음? 풀어보는 문제유형이였다.일단 서버에서 작동하고 있는 파이썬 코드가 주어졌다.이런 코드이다.우리가 command에 문자열을 입력하고 그 입력값에 final_cmd 뒤에 붙어 exec()함수의 인자로 들어가 실행시킨다.대회때 이 문제를 풀고 있었다면 몇몇 문자열은 필터링 되고있다는 걸 알 수 있다. 그 필터링 값들은 다 black.list.BLACKLIST 안에 있.......

코드엔진(codeengn basic 15) [내부링크]

"Name이 CodeEngn일때 Serial을 구하시오 "또 시리얼값 찾는 문제이다.Name과 serial에 값을 넣고 참 wong correct 출력해주는 프로그램이다.이제 올리로 까보자.이 브레이크 포인트가 있는 부분이 우리가 입력한 값이 함수에 의해 처리되는 부분이다.이제 하나한씩 실행시키면서 변화를 봐보자.현재 위치부분은 우리가 입력한 Name 문자열 "CodeEngn을 edx 레지스터에 넣는 모습이다. 이제 이전 함수 다음에 call해주는 부분이 있는데 그 부분을 까보진 않았지만 우리가 입력한 "CodeEngn"문자열을 프로그램에 맞게 시리얼 값을 구하는 함수인거같다.다시 위 함수로 돌아와서 CMP를 해주는 부분이 있는데.......

코드엔진(codeengn basic 16) [내부링크]

"Name이 CodeEngn일때 Serial을 구하시오 "이번에도 똑같은 시리얼값 구하는 문제이다.15번과 느낌이 거의 같으니 빠르게 빠르게 하겠다.(가상머신으로 돌려서 그런지 결과값을 보지 못해 정답 출력 화면은 못봤다.)별다른 패킹없어 Dev C++로 이루어져 었다고 한다.내가 c++코드를 읽을수가 없어서 연습한답시고 올리로 안돌리고 ida로 까서 해보려 했지만 내가 구한 값과 정답이 일치하지 않아서 그냥 올리로 깠다.이 값을 입력해보자.string 찾는 기능을 통해 "Good Job!"이라는 문자열이 보여 이 부분으로 점프해 bp를 구문마다 걸어놨다.코드를 따라가다가다 이제 CMP를 확인해보자. CMP는 우리가 입력한 256의.......

AES 개론 [내부링크]

배운 내용 + AES 구현 이후에 적어내려본 AES이다.

AES Source Code [내부링크]

내가 구현한 AES python source code이다.현재 128bit만 테스트를 해봤지만 알고리즘은 192 256도 돌아갈 수 있게 되어있다.만약에 192 256이 안돌아 간다면 코드에 있는 text2matrix와 matrix2text를 192 256에 맞추어 수정해야 할 것이다.

차분 공격 [내부링크]

이번 학기가 끝나고 동아리에 들어갔는데 첫 과제가 차분공격에 대해 알아오는 것이라서 차분공격에 대해 좀 알아봤다.제가 이해한 바탕으로 차분 공격에 대해 서술하겠습니다.차분공격차분공격은 영어로 differential crypto analysis이다. 이름 그대로 차분공격의 뜻은 암호에서의 차이를 분석해서 공격을 진행하는 것이다.그럼 차이는 무엇인가?차분은 간단하다. x = 0b1011, x'= 0b0011 두가지 값이 있다고 해보자.이 두값의 차이는 0b1000이다.그럼 이 값이 어떻게 나왔는가?차이 계산은 간단하다. 말 그대로 차이 계산이기 때문에 두 값을 xor시켜주면 두 값의 차이가 나오게 된다.이제부터 값의 차이를 차분이라고 표.......

pytorch 이더리움 가격예측 코드 [내부링크]

이더리움 주식의 정보를 이용해 LOW 값 HIGH값 MIDDLE값 3가지 인자를 통해 마지막 최종 거래 값을 예측하는 모델 코드이다.이 코드에는 test set과 train set을 나누지 않아 정확도 테스트를 하지 않았다이건 주식 데이터yahoo finace?였나 여기서 가져왔습니다.수정)지금 보니 입력값을 잘못 넣어주었다. 설계는 high low middle값인데 저 코드 안에는 실수로 open high middle 값이 들어갔다

코드엔진(codeengn basic1) [내부링크]

"HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 " 를 해결하는 문제이다일단 파일부터 실행시켜보자HD를 CD-Rom으로 인식시켜줘라 하는 조건이 나왔다하지만 현재 이 실행파일은 HD를 CD-ROM으로 인식시키지 못하고있다 왜그런지 한번 olly로 까보자디버거로 까보면 MessageBoxA라는 함수가 있고 GetDriveTypeA라는 함수가 있다MessageBoxA가 실행이되면 함수콜 위에있는 문장이 우리가 처음 실행시켰을때 처럼 위의 문장이 메세지 박스에 들어가 화면에 출력된다그럼 GetDriveTypeA는 말그대로 DriveType을 리턴시켜주는 함수다 지금 위 사진은 GetDriveTypeA함수를 통과시키고 난 후.......

코드엔진(codeengine basic2) [내부링크]

"패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오"가 목표다문제 그대로 실행을 시켰더니 실행이 하나도 안된다.그래서 ollydbg로 까보려 하는데 역시 실행이 불가한 파일이 열리지 않는게 당연하다이런 상황에서는 어셈블리코드로 디버깅하는게 불가능하다고 생각한다.그래서 나는 hex editor로 이 실행파일의 hex code를 확인했다나는 항상 hex코드를 볼때 면 앞에 hex값을 본다. 왜냐하면 맨 앞에 있는 hex값이 파일의 확장자를 알려주는 파일시그니처 부분이다.현재 이 파일은 MZ라는 시그니처를 가지고 있다.MZ라는 확장자를 처음들어봐서 검색해보니 DOS환경에서 EXE파.......

코드엔진(codeengn basic3) [내부링크]

"비주얼베이직에서 스트링 비교함수 이름은? "이 문제이다파일을 실행시키면문자열을 입력하고 registrieren을 누루면 입력값과 설정값을 비교해 메세지 박스를 출력해주는것같다.문제의 스트링 비교 함수이름을 알아보기위해 올리디버거를 켰다.ollydbg에서 실행파일에 있는 함수들을 확인하는 방법은 아래와 같이 마우스 우클릭후 아래 경로로 들어가면된다.위 사진이 이 실행파일에 존재하는 함수들이다.그러면 이중에서 문자열 비교 함수는 무엇인가?"비교"라는 단어가 있으면 CMP가 있는가 없는가를 먼저 찾아보면된다.위 사진에서 vbaStrCmp가 문자열 비교 함수처럼 보인다. 저부분을 더블클릭해서 저 함수가.......

코드엔진(codeengine basic4) [내부링크]

"이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 "라는 문제이다.일단 파일을 실행시켜보자일반적으로 파일을 실행시키면 정상이라는 문구가 뜬다.하지만 ollydbg로 실행시켜보면 디버깅 당함 이라는 문구가 뜬다그러면 함수를 둘러봐보자이 문제도 3번과 동일하게 함수를 찾기 위해 아래의 경로로 들어간다"이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 "라는 문제를 보면 Debugger가 존재하는가? 에대한 결과를 출력해주는 함수를 찾아보면IsDebuggerPresent라는 함수가 보인다.이함수가 있.......

코드엔진(codeengn basic5) [내부링크]

"이 프로그램의 등록키는 무엇인가 "라는 문제이다일단 프로그램을 실행시켜보자시리얼값을 입력하고 레지스트 버튼을 눌러 맞으면 correct 틀리먄 wrong 창을 띄어주는것같다그럼 시리얼값을 알아보기위해 ollydbg로 까보자근데 까보면 평소 디버거로 깠을때의 상태로 보이지가 않는다.아무리봐도 무슨 코드인지 알아보기가 힘들다. 그래서 나는 이파일은 패킹이되어있는게 아닐까? 하는 생각을 했다.PEID프로그램을 이용해서 확인해보자확인해보니 UPX가 되어있다.이제 이파일은 언패킹해보자나는 mac환경이라 brew install upx를 통해 upx를 다운로드했다.이제 언패킹이 되었다이제 디버거로 보면 알아볼수있는 형태로.......

코드엔진(codeengn basic6) [내부링크]

"Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD "문제이다일단 파일부터 실행시캬보자간단하게 입력박스에 문자를 입력하고 설정된 시리얼값과 동일하면 correct 틀리면 wrong을 띄어주는 프로그램이다.일단 문제에 나와있는것처럼 언패킹부터 시작하자나는 푸는 과정에 언패킹을 미리 했다.파일을 실행시켰을때의 힌트: wrong을 띄어주는 텍스트 박스가 있다 즉 텍스트 박스를 띄어주는 함수가 있다.여기로 들어가보자이쪽 부분이다. 살펴보니 우리가 입력하는 문자열을 받아드리는 GetDlgItemTextA라는 함수가 있고 아래에 우리가 실행했을때 본 wrong을 띄어주는 함수 부분과 correct.......

코드엔진(codeengn basic 7) [내부링크]

이번엔 쉬어가는 타임인 느낌이다.그냥 C드라이브 이름만 CodeEngn으로 바꾸고 지켜보기만 하면된다.하지만 현자 나는 패러럴즈로 가상머신을 돌려서 하고있고 동시실행 모드를 켜서 다른 폴더 이름으로 잡혔다.그래도 일단 파일을 실행시켜보자그냥 입력후 비교 correct wrong을 출력해주는 프로그램이다.위 사진은 상태는 GetVolumeInformationA함수를 지난 후다. 이 함수 아래를 보면 4562-ABEX를 이어 붙여주는 함수가 있다. 결과를 보면 현재 내 폴더이름 + 4562-ABEX가 된다.CodeEngn마지막에 우리의 C드라이브 폴더 명을 다른 문자로 치환되어 최종 시리얼이 나타나는데 현재 나의 환경에서는 폴더명을 바꿨는데도 불구하고 인식이 안되.......

코드엔진(codeengn basic8) [내부링크]

"OEP를 구하시오 Ex) 00400000 "문제를 보니 파일이 패킹되어있는 것 같다.확인해보니 역시 패킹이 되어있었다.이 문제를 푸는 방법이 2가지가 있다.1. 패킹된 파일을 언패킹 시킨다.2. 직접 찾는다.1번은 그냥 upx로 언패킹하면된다.2번을 해보자.아직 잘 하지는 못하지만 pawnable ctf문제를 풀때 디스어셈블이 안되는 파일이 있을때가 있다. 이때도 직접 start지점을 직접 찾아야했는데 2번도 이런 느낌으로 해보자.패킹된 파일은 PUSHAD와 POPAD로 이루어져 있다고 한다.PUSHAD는 모든 레지스터를 스택으로 PUSH시키는 명령어이다. 저 부분을 실행시키면 아래처럼 된다.ESP값이 변화했다.follow in dump를 하면 he.......

코드엔진(codenengn basic9) [내부링크]

"StolenByte를 구하시오 Ex) 75156A0068352040 "문제인데 StolenByte가 뭔지 몰라서 검색해봤다.간략하게 설명하면 패킹이된 파일은 PUSHAD POPAD가 이루어지는데 POPAD이후 몇가지 코드가 추가가 되어있으면 그부분이 Stolen부분이다.일단 파일 실행부터 해보자.위 상황은 언패킹을 하기 전이다.패킹을 한 후에 보면 맨처음 알림창이 아래 사진처럼 이상해진다.아마 예상으로는 POPAD이후 코드가 여기 들어갈 인자들을 훔친것(?)같다.그러면 언패킹 후 파일을 디버거로 봐보자위 사진처럼 메세지박스 출력 클릭 출력하는 명령들인것같다. 그런데 어째서 NOP코드가 있는가? 저부분이 패킹되어있는 파일에서 POPAD이후의 명령.......

코드엔진(codeengn basic10) [내부링크]

"OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오.정답인증은 OEP + OPCODEEX) 00400000EB03"OEP주소를 구하라니깐 피킹이 되어있을거라고 예상을했다. 그래도 PEID로 확인을 해보자확인을 해봤는데 여태까지 앞선 문제는 upx패킹이 되어있었는데 갑자기 ASPack이 되어있다해서 당황했지만 앞선 문제에서 했던것처럼 수동으로 시작지점을 찾아줬다.분기점을 찾았는데 ollydbg에 있는 analysis기능을 사용해봤지만 제대로 디코딩이 안되었다. 그래서 ollydump를 이용해 저 시작부분을 dump시켜주었다.이 덤프파일을 디버깅하려고 하는데분명 시작지점에는 push ebp같은 push구문의 프롤로그가 있어야하.......

padding oracle attack source code (수정본) [내부링크]

이전에 말한 git hub 소스코드를 내가 원하는 방식으로 수정했다.크게 수정한 부분은 없지만 수정한 부분은1. CBC-pad와 관련된 함수들을 class 객체로 지정해서 다양한 암호문을 만들어 padding oracle attack을 할 수 있도록 함2. CBC-pad 부분에서 encrypt decrypt에서 실험자가 원하는 key값과 iv값을 지정할 수 없게 되어있어서 실험자가 key값을 지정해 놓을 수 있도록함 iv값은 아직 iv에 대한 확실한 지식이 갖추어지지 않았기때문에 건들지 않고 random값으로 돌렸다.부족한 부분아직 중간에 있는 함수를 완벽히 이해를 못했다. 시간이 날때마다 계속 디버깅 해가면서 코드 한줄 한줄을 이해하는데 노력해야겠다.이제 채워야할 부.......

앞으로 해야할 것 [내부링크]

현재는 github의 소스코드를 수정해 padding oracle attack test 코드를 만들었다.앞으로 해야할 것은1. 학과 교수님께 padding oracle을 통한 블록암호모드의 안전성에 대해 물어본다.2. 교수님께 얻은 답변을 참고해 프로젝트의 방향성을 확실히 정한다.3. 가능하면 AES를 C언어로 구현을 해보고 싶다.

해시함수, 충돌쌍, 레인보우 테이블, 솔트값 [내부링크]

자다가 갑자기 해시함수가 떠올라서 글을 남긴다해시함수는 단방향(일방향) 성질을 갖는 암호 알고리즘이다.그럼 여기서 단방향 성질은 무엇인가?보통의 암호 알고리즘은 양방향이다.양방향을 간단하게 설명하자면 내가 학교를 갔다가 다시 집으로 돌아올수 있는 것을 말한다.이것을 암호로 생각을 해보면 암호화가 가능하면 복호화도 가능하다는 것이다.그럼 단방향은 양방향의 반대 개념이다.내가 무기징역을 받으면 절대 감옥에서 못나오듯이 해시함수는 암호화가 진행이되면 죽었다 깨어나도 복호화가 되질을 않는다.여기서 한가지 의문점이 들수 있다.그 의문점은 복호화가 안되는데 왜 해시 함수를 쓰는가?그 이유는 해시함수의 in.......

스택의 구조 [내부링크]

위 그림이 스택의 구조이다.32비트 기준 스택의 구조는 variables(buffer) , ebp(sfp) ,ret ,esp로 이루어져 있다.각각의 간단한 설명을 해보겠다.variables(buffer): buffer는 함수에 저장되는 데이터 값이다.sfp(ebp): 현재 진행중인 함수가 끝나고 돌아갈 주소를 저장한다.ret: 실행할 함수의 주소를 넣는다.esp: 처음에 제일 낮은 주소에 있다가 buffer가 한 개씩 쌓일때마다 esp + 1을 해줘서 스택의 위치를 표시해준다.

buffer over flow(BOF) [내부링크]

buffer over flow는 단어 그대로 버퍼가 넘쳐 흐르게 하는 기법이다.예시를 들기전에 간단한 이론 설명을 하고 가보자.BOF는 buffer를 넘치게하여 esp의 위치를 ret까지 넘쳐흐르게해 ret부분을 우리가 원하는 주소로 보내버리는 기법이다.만약 우리가 수많은 buffer값을 넣어 ret를 덮을수 있다면 우리는 이 시스템을 완전히 컨트롤 할 수 있게된다.위와 같은 코드가 있다고 해보자.위와 같은 코드의 스택 구조는 아래와 같다.우리가 설정해놓은 buffer의 크기 20과 ebp ret로 이루어져 있을 것이다.그러면 저 코드에서 BOF는 어디에서 일어나는 것인가?gets함수에서 BOF가 발생한다. 그 이유는 gets함수는 입력값의 크기(길이)를 체크하지 않.......

GOT overwrite (feat. plt, got) [내부링크]

GOT overwrite를 설명하기 전에 plt got에 대해 간단하게 알아보자.간단하게plt: 외부 라이브러리를 연결해주는 것got: 우리가 사용하고싶은 함수의 실 주소가 담겨있는 곳예를 들어보자우리가 printf라는 함수를 쓰기 위해서는 #include<stdio.h>를 해줘야 한다.여기서 got가 #include<stdio.h> 라고 생각해도 좋다.한번 printf를 실행하는 것을 머릿속으로 떠올려 보자.printf가 실행되는 순서는1. 사용자가 call printf를 해준다.2. plt를 통해 printf 함수고 실제로 존재하는 got 주소로 jmp를 해준다.3. got에 있는 printf의 주소를 반환받아 printf 를 사용한다.다시 정리하자면 plt는 got에서 함수를 꺼내오기 위한 도.......

함수의 offset (feat.got) [내부링크]

이번에는 함수의 offset에 대해서 알아볼거다.이전 글에서 got를 #include<stdio.h>의 printf를 예를 들어 설명을 했다.그런데 <stdio.h>에는 printf만 있는것이 아니라 scanf등과 같은 함수가 존재한다.그러면 컴퓨터는 어떻게 우리가 원하는 함수를 찾아서 갖다주는지 알아보자.비유를 하나 해보자면 컴퓨터는 눈이 안보이는 장님이다. 우리는 함수의 offset을 알고 있다.그럼 컴퓨터는 함수를 어떻게 찾아다가 주느냐?컴퓨터는 눈이 안보이지만 자신이 base지점에 있다는 것은 안다. (각 함수는 base지점 + offset의 위치에 존재한다.)그래서 우리가 printf함수를 호출할때 컴퓨터에게 printf의 offset은 뭐뭐야 라고 말해주.......

HSCTF7 Boredom [내부링크]

HSCTF7에 참여할라 했는데 과제하느라 깜빡하고 끝나기 2시간 전에 확인해서 쉬운거 2문제 밖에 못풀었다..나머지는 시간날때 하나씩 풀어야지위 사진이 문제 소스코드이다.1번 문제였는데 1번문제인 만큼 간단한 BOF문제이다.main함수에 toDo변수의 size는 200 입력하는 gets(toDo)에서 toDo에 입력할 문자열의 길이를 체크하지않아서 BOF가 발생한다.BOF를 할라고 보니 다행히 canary가 없다. 안심하고 BOF시키고 return주소에 flag 주소를 넣으면 끝난다.위 주소가 flag 함수 시작 주소이다. ret에 저 주소를 때려박자.file이름을 개인적으로 fuck으로 설정한다;;;payload

HSCTF7 pwnagotchI [내부링크]

2번째 문제main 함수 이 문제는 BOF + ROP이다. 또 gets에서 문자열 체크를 안한다. (BOF ㄱㄱ)근데 문제는 다시 main으로 돌아올때 once가 1로 바껴서 main의 if문에 잡혀서 끝난다. 그래서 처음에 main으로 리턴 안하고 else부분으로 리턴 시켜서 BOF를 재진행 했더닌 v5의 buffer가 초기화가 안되서인지 오류가 났다.위 두 함수가 메인함수에 hungry sleep의 조건문을 패스 시켜주도록 해주는 함수이다. 그래서 처음 BOF를 지행할때 main으로 다시 리턴 시키기 전에 eat하고 sleep을 시켜주면 main으로 돌아가 모든 버퍼가 초기화되서 다시 BOF가 가능하다.이제 ROP gogopayload

사용툴 [내부링크]

pwntoolsROP_gadgetroppermain_arena_offsetpeda-gdb + heap plugin

부족한점 채우기 [내부링크]

지금까지 프로그래밍언어의 ㅍ자도 모른상태에서 포너블 공부를 시작했다. 초반 기초는 운좋게 학과 선배의 도움을 받았지만 이후에는 독학으로 이어갔다. 혼자 워게임과 CTF를 하면서 '내가 잘 공부하고 있는게 맞나'하는 확신이 들지않았다. 이상태로 계속 공부를 이어갔다. 대학교 1학년때 처음 시작해서 1년을 갈아넣어 저 상태로 공부하고 BOB에 지원하게 되었다. 별 실력이 없는 내가 운좋게 면접까지 갔지만 면접에서 떨어졌다. 긴장을 너무 많이해서 말을 아에 못한것도 맞지만 개인 성격상 어설프게 아는것을 답변을 하는 것을 원하지 않는 성격도 한 몫 한것같다. 이번 BOB면접에서 떨어지고 부족한 점을 생각해봤다. 1. 너무 겉멋에 들.......

pytorch 선형회귀 jupyter code [내부링크]

학교 수업 내용중에 선형회귀 내용이 신기해서 데이터사이언스에 살짝 관심이 가있었는데 방학을 계기로 맛만보기로 시작했다.시작을 gore edu에 나와있는 머신러닝 영상을 먼저 보고 대충 틀을 이해했고 이후 kaggle에서 tutorial문제로 삽질을했다.kaggle문제는 데이터 가공을 못한탓인지 accuracy가 낮게 나와서 제대로 공부 한 후 다시 도전할거다.지금 올리는 파일은 pytorch를 이용해 선형회기 분석코드를 작성한 것이다.공부 출처는 여기있는 자료들을 보고 공부하고있다.원래는 tensorflow로 시작하려 했으나 대부분의 영상강의 자료가 tensorflow구버전을 사용을 해서 최신버전으로 사용하고싶은 나에게는 좀 불편해서 다른 무언.......

pytorch 인공신경망 ~ 일부 자연어처리 (ML/MC 도전기) [내부링크]

pytorch를 이용한 선형회귀의 연장선 deep learning의 인공신경망 부터 LSTM NLP까지다음은 reinforce training? DQL을 이어서 할것이고 자연어 처리와 신경망 활용이 용이해지면 이를 이용한 퍼저 제작도 해볼 생각이다수정)사진이 안나오는것같아서 이 zip파일을 풀어서 같은 폴더에 넣는다.

ARP spoofing [내부링크]

인터넷 서칭을 하면서 알아본 arp spoofing 정리너무 두서없이 정리한것 같지만 최대한 나라도 이해할수 있을만큼 정리했다

AES-CBC MODE source code in python [내부링크]

CBC-PAD 기반의 AES 코드이다CBC-PAD의 oracle padding test tool을 다 만들면CBC-PAD외에 다양한 패딩을 적용한 CBC모드를 만들거다근데 문제는 pwntool만 사용하던 python을 통해 처음 개벌을 해보려니 orable padding tool 제작이 쉽지않다....oracle padding attack을 좀 더 자세하게 알아보고 코드 구상을 해봐야겠다

padding oracle attack (이론) [내부링크]

padding oracle attack은 블록암호 모드 중에서 상황에 따라 패딩을 필요로 하는 블록 암호 모드에 적용이 가능한 기법이다.현재 알고있는 블록 암호 모드중에 패딩을 필요로 하는 암호 모드는 CBC와 CFB가 있는데 인터넷에 많은 예시로 나와있는 CBC 모드에 대한 padding oracle attack에 대해서 알아보겠다.위의 사진이 CBC모드의 암복호화 과정이다.위 사진처럼 문장을 블록암호 버전에 맞는 크기로 잘라 블록단위로 나누어 암호화를 진행한다.여기서 블록 단위로 자를때 패딩을 추가해준다.그럼 패딩은 무엇인가?블록 속에서 부족한 부분을 채워주는것 이라고 생각하면 편할 것이다.예를들어 블록 사이즈가 8이라고 가정했을때 문장이.......

padding oracle attack 참고 [내부링크]

위 깃헙에 있는 코드를 참고할 예정이다.원래는 위 코드를 그대로 배끼고 코드 한줄 한줄 이해하는 형식으로 진행하려 했지만코드가 내가 원하는 형식대로 안짜여져 있어서 위 코드줄을 줍줍해 코드를 짤예정이다.고칠부분AES_CBC 함수 부분을 class로 지정해 쉽게 접근할 수 있게하고처음에 알고 있는 값과 나중에 알게된 값을 출력해주는 부분도 추가할거다.

xor 암복호화 , 파이썬 코드 [내부링크]

처음으로 받은 문제가위 사진 처럼 사진을 암호화했고 그 암호화에 사용한 키는 0x41을 xor시켜서 암호화 ...

스택 [내부링크]

스택 구조스택 구조를 설명하기 전에 간단한 스택구조에 들어갈 코드를 짜볼게요.코드를 짜고 스택 구조를 ...

범용 레지스터 [내부링크]

이전 내용에서 설명했던 스택 구조 간단 그림을 생각을하면서 범용레지스터에 대해 알아보자.나도 아직 ...

어셈 명령어, 프롤로그 에필로그 [내부링크]

이번에도 이 그림을 생각하면서 내용을 풀어나간다.오늘 알아볼 명령어는 push cmp jmp mov sub 등등을 알...

reversing.kr 1번문제 esay crack me [내부링크]

이번엔 지금까지 공부했던 내용을 가지고 easy crack me 라는 문제를 풀어볼거다easy crack me 프로그램을 ...

BOF란? [내부링크]

먼저 포너블을 하기에 앞서 BOF가 어떤 원리인지 알아 볼것이다.BOF = buffer over flow의 ...

hackCTF BOFbasic [내부링크]

이 문제는 간단한 오버플로우를 통해서 조건문을 만족시켜주면 쉘을 얻게되는 문제이다.바이너리를 간...

hackCTF Basic_BOF2 [내부링크]

이번 문제는 BOF를 통해 리턴값을 변조 시키는 문제이다.바이너리를 분석해보면 --------s---------v5--...

hackCTF 내 버퍼가 흘러넘친다! [내부링크]

이번 문제는 쉘코드를 삽입해 리턴 주소를 쉘코드 삽입한 주소로 리턴시켜 쉘을 따는 문제이다바이너리를 ...

hackCTF x64 Buffer over flow [내부링크]

이번 문제도 간단히 ret을 덮어 원하는 주소로 점프시키는 문제이다.그냥 입력하고 출려해주는 바이너리이...

hackCTF x64 simple size bof [내부링크]

이번 문제도 쉘코드 문제이다v4의 포인터를 출력해주고 v4에 입력을 해주는 바이너리이다취약점은 gets에서...

hackCTF simple overflow ver2 [내부링크]

이번 문제도 쉘코드 삽입 문제이다.s에다 데이터를 입력해주고난뒤 s의 주소를 출력하고 s의 내용을 하나하...

hackCTF offset [내부링크]

이번 문제는 말그대로 오프셋 계산 문제이다바이너리는 간단하다.gets로 문자열 길이를 체크 안하고 s인자...

hackCTF BOF_PIE [내부링크]

바이너리는 간단하다 메인 함수에서 welcome함수로 이동하고 welcome에서는 welcome함수의 주소를 알려주고...

hackCTF RTL_Wold [내부링크]

바이너리는 번호에 맞게 함수를 실행하는 함수이다. 원래 이문제는 gold-=2999부분에서 출력해주는 ...

hackCTF poet [내부링크]

바이너리는 간단하다 시 내용을 입력하고 저자를 입력하고 평가할떄 조건에 맞는 단어가 들어갈시 점수 +10...

hackCTF 1996 [내부링크]

나는 c++바이너리를 읽을줄 모른다.그래서 그냥 프로그램을 실행시키고 그걸 통해서 바이너리를 이해한다....

hackCTF Beginner_Heap [내부링크]

처음 풀어보는 힙문제이다.메인함수 바이너리는 이렇게 생겼다.간단하게 malloc을 v3 v4에 0x10만큼 할당을...

hackCTF UAF [내부링크]

첫번째는 우리가 입력한 사이즈만큼 malloc할당 두번째는 우리가 입력한 인덱스 힙영역을 프리세번째는 입...

hackCTF ROP [내부링크]

이번문제는 아주 아주 간단한 32비트 ROP문제이다.바이너리는 간단하다 그냥 입력하고 출력밖에 없다.그...

hackCTF RTC [내부링크]

이번문제도 나는 단순 ROP로 풀었는데 문제자의 의도에 맞는 풀이인지는 잘 모르겠다.바이너리는 단순...

pawnable.kr brainfuck [내부링크]

바이너리는 우리가 입력을하고 그입력값을 do_brainfuck함수의 인자로 전해주고 각 케이스에 맞게 실행을...

pwnable.kr echo1 [내부링크]

이번문제는 다른분의 라업을 참고해서 문제를 풀었다....이문제는 shell craft하고 어셈을 한번더 생각하게...

pawnable.kr echo2 [내부링크]

이번 문제는 echo2이다 이전 echo1과 다른점이 있다.일단 이름 입력 그다음 echo2에서 값을 입력 그리고 입...

pwnable.tw HACKNOTE [내부링크]

이번 문제는 fastbin chumk를 활용한 uaf문제이다.[add] == malloc이쪽add 함수에서는 ptr배열...

pwnable.tw doublesort [내부링크]

이번 문제는 scanf의 취약점 아닌 취약점과 거품 정렬을 통해 트리거 하는 문제이다.바이너리는 이름은 ...

pwnable.tw silverbullet [내부링크]

이번 문제는 으음 뭐라 해야할지는 잘 모르겠지만 코드상의 오류를 통해 트리거 하는 문제였던것 같다.[...

pwnable.kr loveletter [내부링크]

이번 문제는 1바이트 오버플로우? 느낌의 문제였다.[main]메인함수는 간단하다 배열에 256만큼 문자열...

pwnable.tw tcache tear [내부링크]

이번 문제는 언솔빈 영역에 할당하기위해 fake_cunk를 만들어 libc릭을 해서 트리거 하는 문제였다.glibc 2...

pwnable.tw spirited away [내부링크]

이번 문제는 제목과 비슷한 기법인 house of spirit을 이용하는 문제이다.house of siprit의 개념은 http...

fake ebp 기법 [내부링크]

fake ebp는 leave ret 을 이용하는 기법이다.leave ret 을 한번 까보자.leave - mov esp,ebp pop ebp...

HSCTF aria writer [내부링크]

이번문제는 pawnable.tw에 spritied away문제를 통해서 house of sprit을 알게되고 이 문제가 생각나서 풀...

arp 스푸핑 공부중 (코드파일 java) [내부링크]

유튜브 나동빈님의 영상을 보고 했는데 소스코드를 잘못 적은게 있는지 내가 테스트 했을때는 실패했다.

웹파싱 [내부링크]

웹파싱이 궁금해서 대충 해본 코드

클라이언트 서버 채팅 구축(코드) [내부링크]

소켓 프로그래밍이 어떤식으로 되는지 궁금해서 인터넷과 유튜브를 참고해서 클라이언트 서버 채팅을 짜보...