[해킹 대회 문제] wargame.kr - WTF_CODE 문제풀이(Write Up)
WTF_CODE 문제는 간단한 개발 관련 상식을 가지고 있는지, 혹은 모르는 내용을 인터넷에 적절히 검색하여 문제를 해결해 나갈 수 있는 능력이 있는지를 물어보는 문제 유형입니다.

문제 풀이를 시작하면, 하나의 소스코드 파일을 제공합니다. 이를 다운로드 받아서 열어 볼 수 있습니다.

실제로 에디터(Editor)나 브라우저를 하나 실행하여 이 파일을 열어 보면, 내부적으로 공백만 포함되어 있습니다.

구글에서 .ws 확장자에 대해서 검색해 보면 Whitespace 프로그래밍 언어라고 나옵니다. 다시 말해 공백으로만 이루어진 프로그래밍 언어라는 의미인 것 같습니다. 온라인 IDE 중에서 이러한 프로그래밍 언어를 실행시켜주는 서비스가 있습니다.
바로 ideone입니다. 홈페이지 주소: http://ideone.com/
실제로 해당 온라인 IDE에 접속하여 소스코드 유형을 [Whitespace]로 설정한 뒤에 소스코드를 붙여넣기 하고, [Run] 버튼을 눌러 코드를 실행할 수 있습니다.

실행 결과 다음과 같이 Key 값이 등장합니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - md5 password 문제풀이(Write Up) (0) | 2019.07.13 |
|---|---|
| [해킹 대회 문제] wargame.kr - fly me to the moon 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - login filtering 문제풀이(Write Up) (1) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - QR CODE PUZZLE 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up) (2) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - login filtering 문제풀이(Write Up)
이 문제 또한 웹 해킹 유형의 문제입니다.

문제 풀이를 시작하니 해당 페이지의 기능을 담당하는 PHP 소스코드를 보여주는 버튼이 등장합니다. [get source] 버튼을 눌러서 소스코드를 확인할 수 있습니다.

소스코드를 확인합니다. 먼저 mysql_real_escape_string() 함수는 SQL Injection을 방어하기 위한 기본적인 함수입니다. trim() 함수는 사용자가 입력한 문자열에서 앞뒤 공백문자를 제거해주는 역할을 수행합니다.
다시 말해 적절한 ID와 PW를 입력하여 로그인을 하면 플래그(Flag) 값이 나올 것 같습니다. 그렇다면 어떠한 아이디와 비밀번호를 입력해야 문제를 풀 수 있을까요? 이 문제는 문제 제목에서부터 볼 수 있듯이 필터링(Filtering)과 관련한 문제로 이해할 수 있습니다.

이 문제는 SQL Injection 문제가 아닙니다. 페이지의 소스코드를 보면 다음과 같이 데이터베이스에 기록되어 있는 아이디 및 비밀번호 정보가 포함되어 있습니다. 따라서 SQL Injection 문제는 아니고, 인증에서의 필터링(Filtering) 우회 문제라고 할 수 있습니다.
이 문제는 PHP는 문자열 비교에 있어서 대소문자를 구별하지만, MySQL은 기본적으로 대소문자를 구별하지 않는다는 점을 이용하면 풀 수 있습니다. (이는 MySQL을 이용하는 개발자들이 자주 간과하는 특징이기도 합니다.) 다시 말해 파라미터 $id 값의 문자열에 대문자를 끼워서 입력하면 문제를 풀 수 있습니다.
예를 들어 아이디(ID) 값으로 GUEST라고 넣게 되면, 데이터베이스에 존재하는 guest라는 회원 정보 검색에 성공하기 때문에 GUEST라는 데이터를 얻습니다. 그렇기 때문에 필터링을 우회하여 블록(Block) 처리 된 사용자로 로그인을 할 수 있게 되는 것입니다.

따라서 다음과 같이 아이디(ID)에 하나 이상의 대문자를 끼워서 ID 및 PW를 입력하면 문제가 풀립니다.

다음과 같이 Password(Flag) 값이 등장합니다.

※ MySQL 대소문자 구별에 대하여 ※
MySQL 온라인 컴파일러를 이용하면, 대소문자 구별을 정말 안 하는지 확인할 수 있습니다.
https://paiza.io/en/projects/new?language=mysql
위 사이트에 접속하여 다음과 같은 소스코드를 입력하여 실행해보세요.
create table Test(id integer, title varchar(100));
insert into Test(id, title) values(1, "Hello");
select * from Test where title = 'HELLO';
실행 결과 정상적으로 데이터를 조회합니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - fly me to the moon 문제풀이(Write Up) (0) | 2019.07.13 |
|---|---|
| [해킹 대회 문제] wargame.kr - WTF_CODE 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - QR CODE PUZZLE 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up) (2) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - already got 문제풀이(Write Up) (0) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - QR CODE PUZZLE 문제풀이(Write Up)
QR CODE PUZZLE 문제는 말 그대로 QR 코드를 찾아내는 문제입니다. 문제 유형은 웹 해킹입니다.

문제 풀이 페이지로 이동하면 다음과 같이 QR 코드 퍼즐이 등장합니다. 다만 우리가 직접 퍼즐을 움직여서 QR 코드를 찾아내는 것은 쉽지 않을 것 같습니다.

다만 개발자 도구(F12)를 실행하여 소스코드를 확인해 보면, #join_img라는 요소의 src 속성의 값을 변경하는 부분이 등장합니다. 이미지의 소스를 변경하겠다는 의미이므로, 이 소스 값이 원래 이미지를 나타내는 경로일 가능성이 높습니다.

따라서 [Console] 탭으로 이동하여 해당 소스 부분의 문자열이 원래 어떤 것이었는지 확인합니다. 이렇게 콘솔 창에서 코드를 직접 실행하는 방식을 동적 분석 방식이라고 합니다.

결과적으로 다음과 같이 해당 경로로 이동해보니, QR 코드 이미지가 등장했습니다.

QR 코드는 온라인 디코더(Decoder) 서비스를 이용해서 직접 휴대폰으로 촬영하지 않아도 간단히 인식할 수 있습니다.
▶ ZXing Decoder 홈페이지: https://zxing.org/w/decode.jspx

인식된 결과를 확인해 보니 다음과 같이 특정한 URL 주소가 등장했습니다.

해당 URL 주소로 이동하니, 성공적으로 플래그(Flag) 값을 얻을 수 있었습니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - WTF_CODE 문제풀이(Write Up) (0) | 2019.07.13 |
|---|---|
| [해킹 대회 문제] wargame.kr - login filtering 문제풀이(Write Up) (1) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up) (2) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - already got 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - Crypto Crackme Basic 문제풀이(Write Up) (0) | 2019.07.10 |
[해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up)
flee는 '달아나다'라는 뜻을 가지고 있습니다. 말 그대로 버튼이 달아나는 상황에서 버튼을 클릭해야 되는 문제라고 이해할 수 있습니다. 따라서 이 문제 유형 또한 웹 해킹 문제 유형입니다.

문제 풀이를 시작하면 다음과 같이 [click me!]라는 버튼이 등장합니다. 이 버튼을 클릭하면 정답 처리를 받을 수 있다는 의미인 것 같습니다. 다만 마우스를 움직이면 이 버튼이 마우스를 피하여 이리저리 움직인다는 특징이 있습니다.

따라서 개발자 도구(F12)를 실행하여 다음과 같이 [요소 선택] 버튼을 누릅니다. 그러면 화면이 정지 상태가 되며, 이 때 버튼을 클릭할 수 있습니다.

그러면 다음과 같이 플래그(Flag) 값이 등장합니다. 또한 이 문제는 개발자 도구에서 [Elements] 탭으로 이동하여 소스코드 상에서 버튼 클릭 함수를 확인하고, 그것을 콘솔 창에 입력하는 방식으로도 문제를 풀 수도 있답니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - login filtering 문제풀이(Write Up) (1) | 2019.07.13 |
|---|---|
| [해킹 대회 문제] wargame.kr - QR CODE PUZZLE 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - already got 문제풀이(Write Up) (0) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - Crypto Crackme Basic 문제풀이(Write Up) (0) | 2019.07.10 |
| [해킹 대회 문제] wargame.kr - DLL with notepad 문제풀이(Write Up) (0) | 2019.07.09 |
[해킹 대회 문제] wargame.kr - already got 문제풀이(Write Up)
already got 문제는 가장 쉬운 문제 유형으로, 웹 해킹 문제입니다.

웹 페이지에 접속하면 다음과 같이 이미 Key 값을 얻었다는 메시지가 나옵니다. 그렇다면 서버로부터 이미 Key를 전달 받았다는 의미로 이해할 수 있습니다.

따라서 개발자 도구(F12)를 실행한 뒤에 새로고침을 해보면, 다음과 같이 [Network] 탭에서 서버로부터 전달 받은 응답헤더(Response Header)에 [FLAG] 값이 포함되어 있는 것을 확인할 수 있습니다.

결과적으로 다음과 같이 제출하여 정답 처리를 받을 수 있었습니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - QR CODE PUZZLE 문제풀이(Write Up) (0) | 2019.07.13 |
|---|---|
| [해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up) (2) | 2019.07.13 |
| [해킹 대회 문제] wargame.kr - Crypto Crackme Basic 문제풀이(Write Up) (0) | 2019.07.10 |
| [해킹 대회 문제] wargame.kr - DLL with notepad 문제풀이(Write Up) (0) | 2019.07.09 |
| [해킹 대회 문제] wargame.kr - keypad CrackMe 문제풀이(Write Up) (0) | 2019.07.09 |
소규모 1인 유튜브 크리에이터의 세금 납부 방법은?
※ 유튜브 수익에 대한 세금은 어떻게 납부해야 되는가? ※
유튜브(YouTube)를 운영하다 보면 광고 수익이 발생하게 됩니다. 다만 이렇게 얻은 광고수익에 대하여 어떻게 세금 납부를 해야 하는지 궁금하실 수 있습니다.
세금의 경우 연 소득이 크게 발생하지 않는다면 굳이 사업자 등록을 하지 않아도 괜찮습니다. 저 또한 유튜브를 통해 얻는 연 소득이 매우 적기 때문에 사실상 세금 부담이 크지 않습니다. 하지만, 일정 규모 이상의 수입이 있다면 사업자 등록을 하는 게 유리하다고 하네요. 일반적으로 수 천만 원대 이상의 수익이 발생하시는 분들이 사업자 등록을 고려하시는 것 같습니다. 저는 수입이 적기 때문에 해당사항이 아닌 것 같습니다.
더불어 MCN과 계약을 하신 분들이라면, MCN 측에서 정보를 알려 줄 것이므로 MCN과 계약을 하지 않은 1인 크리에이터 유튜버를 대상으로 어떻게 세금을 납부해야 하는지 가이드라인을 제시해드리겠습니다.
※ 부가가치세와 종합소득세 ※
유튜브를 운영하여 수익을 창출할 때 세금 납부는 크게 두 가지입니다. 바로 부가가치세와 종합소득세인데요. 일반적으로 어떤 분야든 사업자 등록을 해서 물건을 팔면 부가가치세가 10% 붙습니다. 종합소득세는 1년간 번 돈에 대하여 소득세를 납부하는 것이구요!
사업자 등록을 하지 않았다면, 부가세는 납부하지 않아도 됩니다. 또한 사업자 등록을 했다고 해도, 애드센스 수입은 해외에서 국내로 들어오는 금액이기 때문에 영세율 적용 대상이라고 합니다. 다시 말해 0%의 세금, 즉 실질적으로 부가세를 납부하지 않는다고 합니다. 그래도 사업자 등록을 한 상태라면 근거 서류와 함께 0%에 대한 신고를 해야 합니다. 즉, 사업자 등록이 되어 있는 경우에는 납부할 금액이 없다고 하더라도 신고는 해야 하는 것이구요!
또한 종합소득세는 사업자 등록 여부와 상관 없이 필수적으로 납부를 해야 합니다. 종합소득세는 일반적으로 1월에서 12월 사이에 벌어들인 소득을 합산해 다음 해 5월에 신고하는 세금입니다. 소득세 신고를 하지 않으면, 나중에 가산세가 부과되기 때문에 꼭 소득세 신고를 해주셔야 한다고 해요!
※ 종합소득세율 ※
그렇다면 얼마의 종합소득세를 신고해야 할까요? 연 단위로 보았을 때,
과세표준이 12,000,000원 이하라면 세율은 6%
과세표준이 12,000,000원 초과 ~ 46,000,000원 이하라면 15%라고 합니다.
특히 연 소득이 억대가 넘어가는 경우에는 꼭 세무사를 고용하셔서 도움을 받으시는 게 현명할 것 같습니다. 다만 저 같이 소득이 적은 유튜버들은, 세무사를 고용하는 것이 더 부담스러울 수 있기 때문에 직접 신고를 하는 게 더 나은 것 같아요!
'기타' 카테고리의 다른 글
| Ubuntu 16.04에 무료 SSL 인증서 설치하기 (Let's Encrypt) (1) | 2019.07.25 |
|---|---|
| 유용한 파이썬(Python) 온라인 개발환경 소개 (0) | 2019.07.15 |
| 하드웨어 정보를 알려주는 프로그램 (HWiNFO, HWMONITOR) (0) | 2019.07.13 |
| 컴퓨터공학과 석사 대학원생의 일기 (0) | 2019.07.06 |
| 인터넷으로 사업자 폐지 하는 방법 (홈택스 이용) (0) | 2019.06.24 |
하드웨어 정보를 알려주는 프로그램 (HWiNFO, HWMONITOR)
이번 포스팅에서는 두 개의 유용한 소프트웨어를 소개하고자 합니다. 하드웨어에 대한 정보를 알려주는 프로그램들입니다. 먼저 HWiNFO는 하드웨어에 대한 정보를 빠르게 수집해서 요약(Summary) 정보를 보여준다는 특징이 있습니다. 드라이버 정보를 포함해 전반적인 하드웨어 관련 정보를 모두 보여줍니다. HWMONITOR는 더 간단한 정보만 요약해서 보여줍니다. 하드웨어 온도(Temperature), 전력 소모량, 각 장치의 이용량(Utilization) 등에 대한 정보를 포함합니다.
▶ HWiNFO 공식 홈페이지: https://www.hwinfo.com/download/
HWiNFO 공식 홈페이지는 위 URL과 같습니다. 사이트에 접속한 뒤에 [Portable] 버전을 다운로드 하실 수 있는데, 가벼운 버전을 이용해도 기본적인 정보를 모두 확인할 수 있씁니다.

다운로드를 하실 때는 설치 프로그램을 받아서 설치하는 방법과, 바로 Portable 프로그램을 받는 방법 등이 있습니다. 저는 바로 [HWiNFO Portable]을 선택하여 다운로드 했습니다.

바로 프로그램을 실행하면 됩니다.

[Run] 버튼을 누릅니다.

실행 후에 약간의 시간이 흐른 뒤에 CPU 및 GPU에 대한 정보부터 Clock에 대한 정보를 알려줍니다. 더불어 메인 보드, 키보드, 오디오 장치, 메인 메모리 등에 대한 정보도 알려줍니다.

또한 [Sensors] 버튼을 누르면 현재 각 장치가 얼마나 많은 전력을 소비하고 있는지, Clock 상태는 어떤지, 온도는 어떤지 등에 대한 정보를 알려준답니다.

▶ HWMONITOR 공식 홈페이지: https://www.cpuid.com/softwares/hwmonitor.html
HWMONITOR 공식 홈페이지는 위와 같습니다. 사실 이 프로그램도 기본적인 하드웨어의 상태 정보를 알려주기 때문에 좋습니다. HWiNFO에서 알려주는 센서 정보처럼 간결하게 알려준다는 장점이 있습니다.
'기타' 카테고리의 다른 글
| 유용한 파이썬(Python) 온라인 개발환경 소개 (0) | 2019.07.15 |
|---|---|
| 소규모 1인 유튜브 크리에이터의 세금 납부 방법은? (0) | 2019.07.13 |
| 컴퓨터공학과 석사 대학원생의 일기 (0) | 2019.07.06 |
| 인터넷으로 사업자 폐지 하는 방법 (홈택스 이용) (0) | 2019.06.24 |
| PHP에서 Facebook Login Access Token으로 이메일(Email) 정보 받아오기 [소스코드] (1) | 2019.06.03 |
기드라(Ghidra) 디버깅 툴 설치 및 기본 사용 방법
기드라(Ghidra)는 미국 국가 안보국(NSA)에서 만들어 오픈 소스로 공개한 역어셈블리어 프레임워크입니다. 기드라를 이용하면 기존에 작성되어 있는 프로그램을 효과적으로 디버깅하고 분석할 수 있습니다. IDA Pro에 대적할 수 있는 무료 프로젝트라고 알려져 있습니다.
▶ 기드라(Ghidra) 공식 홈페이지: https://ghidra-sre.org/
기드라는 공식 홈페이지에서 매우 간단하게 설치할 수 있습니다.

기드라는 JDK 11 버전 이상을 요구합니다. 따라서 기드라를 정상적으로 이용하기 위해서는 사전에 JDK가 설치되어 있는지 확인해주셔야 합니다. JDK 11 이상이 설치되어 있지 않다면, JDK 11이 설치된 폴더를 입력하라는 박스가 나오게 됩디다. 혹시 JDK 11이 존재하지 않으시는 분은 아래 경로에서 설치하실 수 있습니다.
▶ JDK 11 홈페이지: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

이제 Windows 사용자의 경우, Ghidra 배치 파일을 실행하여 프로그램을 동작시킬 수 있습니다.

Ghidra를 처음 실행한 분이라면 다음과 같이 [Ghidra Help] 창이 등장할 겁니다. 이 문서를 참고하여 Ghidra를 어떻게 사용할 수 있는지 공부해 보시는 것을 추천합니다. 이 창을 닫더라도 [F1]을 누르면 다시 등장합니다.

기드라를 실행한 뒤에 프로젝트를 생성하여, 특정한 프로그램에 대한 분석이 가능합니다.

[Ctrl + N]을 눌러서 하나의 프로젝트를 새롭게 만들어 주겠습니다.

저는 다음과 같이 Test라는 이름으로 하나의 프로젝트를 생성해 보았습니다.

이제 분석을 하고자 하는 프로그램 파일을 프로젝트 이름이 적힌 곳으로 Drag & Drop하여 놓으면 파일을 열어서 분석할 수 있게 됩니다. 이후에 프로그램은 어떠한 Format으로 열 것인지 설정할 수 있는데, 기본 설정 그대로 프로그램을 열 수 있습니다.

프로그램이 열린 이후에는 자신이 새롭게 연 프로그램에 대하여 요약 된 정보를 보여줍니다.

또한 특정한 옵션에 따라서 분석해주는 기능이 존재합니다.

[Yes] 버튼을 눌러서 기본 옵션 그대로 분석(Analysis)을 진행할 수 있습니다.

또한 자주 많이 사용하는 기능으로는 문자열(String) 검색이 있습니다.

문자열을 어떤 방식으로 분석할 지 설정할 수 있는데, 기본 설정 그대로 하면 길이가 5 이상은 문자열을 추출합니다.

다음과 같이 특정한 문자열을 검색하여, 해당 문자열이 어디에서 등장하는지 확인할 수 있습니다.

저는 해당 문자열이 나온 부분을 확인하여, 이 문자열이 어떤 함수에서 참조되는지 확인해보았습니다.

특정한 함수의 소스코드 부분을 클릭하면, 자동으로 [Decompile] 영역에 디컴파일 된 소스코드 내용이 출력됩니다. IDA Pro의 Hex-Ray와 흡사하게 동작한다고 이해할 수 있습니다.

그리고 역어셈블리어 도구라고 하면, 플로우 그래프를 그려주는 기능을 빼놓을 수 없습니다. 저는 [Function Graph] 창을 한 번 열어보았습니다.

이후에 Main 함수를 검색하여, 해당 함수를 [Function Graph]로 확인하면 다음과 같습니다.

이상으로 Ghidra의 기본적인 기능을 확인해보았습니다.
'시스템 해킹' 카테고리의 다른 글
| [Apktool 오류] brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1) (1) | 2020.09.15 |
|---|---|
| 간단한 Apktool 설명, 설치, 사용 방법 (안드로이드 앱 분석) (2) | 2020.09.15 |
| OllyDbg의 기본적인 사용 방법 및 Hello World 프로그램 패치해보기 (0) | 2019.07.10 |
OllyDbg의 기본적인 사용 방법 및 Hello World 프로그램 패치해보기
OllyDbg는 어셈블리어 수준의 디버깅 도구입니다. 무료로 이용할 수 있으며, 돌아가고 있는 런타임 환경의 프로그램에 붙여서 동적 분석을 진행할 수 있도록 해줍니다. 흔히 프로그램을 분석해야 할 때 단순히 소스코드만 보고, 실행 과정을 파악하기 어려울 수 있는데 그럴 때 쓰기 좋은 도구입니다.
따라서 Dev C++을 이용하여 간단히 Hello World 프로그램을 작성한 뒤에 이를 분석하여, 프로그램을 패치(Patch)하는 실습을 해보겠습니다.
#include <stdio.h>
int main(void) {
printf("Hello World\n");
return 0;
}
32-bit 프로그램으로 설정한 뒤에 프로그램을 생성하겠습니다.

이후에 다음의 경로에 접속하여 OllyDbg를 설치합니다. 아래쪽으로 내려오면 [download] 링크가 있으며, 여기에 들어가서 OllyDbg 1.10 버전을 받으시면 됩니다.
▶ OllyDbg 홈페이지: http://www.ollydbg.de/

이후에 다음과 같이 [Download OllyDbg] 버튼을 눌러 OllyDbg를 설치합니다.

OllyDbg는 기본적으로 [관리자 권한으로 실행] 해주셔야 합니다.

이후에 [F3]을 눌러서 바로 특정한 프로그램을 열어 디버깅을 진행할 수 있습니다.

그럼 다음과 같이 프로그램 창이 실행 되고, 왼쪽 위에 실행 버튼을 눌러서 프로그램을 동작시킬 수 있습니다.

실행 버튼을 누른 결과 'Hello World'가 출력됩니다.

※ 프로그램 디버깅 및 패치 해보기 ※
이제 'Hello World'를 다른 문자열로 바꾸어 출력하도록 해봅시다. 먼저 Ctrl + F2를 눌러서 Restart를 합니다. [Hex dump]를 확인하여 비어 있는 메모리 주소를 클릭한 뒤에 스페이스 바(Space Bar)를 눌러서 DUMP 수정 창을 열 수 있습니다.

다음과 같이 정보를 수정 할 수 있습니다. 그냥 바꿀 아스키 코드를 입력하여 [OK]를 누르시면 됩니다.

저는 'ABC HELLO!'라고 변경해보았습니다.

이후에 "Hello World" 문자열을 참조하는 부분에서 주소 값을 "ABC HELLO!"의 주소 값으로 설정합니다. 저는 주소 값 403310의 위치에 문자열을 넣었으므로 이 주소로 설정했습니다.

실행 결과, 정상적으로 변경된 문자열이 출력되었습니다.

다른 방법도 존재합니다. 별도의 문자열을 메모리에 기록한 뒤에 그것을 가리켜 출력하도록 하는 것이 아니라, 'Hello World'가 원래 존재하던 메모리 주소에서 값을 변경하는 방법입니다. Hex Dump창에서 [Ctrl + G]를 눌러 "Hello World"의 주소 검색할 수 있습니다.

이제 해당 주소 값으로 이동하여 "Hello World"를 "Hell World"로 변경해보았습니다.

이번에 실행해 보시면 마찬가지로 정상적으로 실행됩니다.

※ 패치된 파일 저장하기 ※
프로그램 패치 후에 저장하는 방법 또한 간단합니다.

[Hex Dump]의 내용을 변경한 이후에 바로 우클릭하여 [Copy to executable file]을 누릅니다.

이제 열린 창에서 다시 우클릭 하여 [Save File]을 눌러서 저장을 진행하시면 됩니다.

저장된 파일을 실행해 본 결과, 정상적으로 변경된 코드 내용으로 출력되는 것을 확인할 수 있습니다.

'시스템 해킹' 카테고리의 다른 글
| [Apktool 오류] brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1) (1) | 2020.09.15 |
|---|---|
| 간단한 Apktool 설명, 설치, 사용 방법 (안드로이드 앱 분석) (2) | 2020.09.15 |
| 기드라(Ghidra) 디버깅 툴 설치 및 기본 사용 방법 (1) | 2019.07.13 |
Truffle로 처음 시작하는 Solidity 개발 환경 구축
일반적으로 DApp을 개발하기 위해서 사용하는 대표적인 언어는 Solidity입니다. 더불어 Truffle을 이용하면 개발 환경을 매우 쉽게 구축할 수 있습니다. 더불어 메타마스크(MetaMask)는 이더리움 관련 앱을 개발하거나 사용하는 전반적인 과정에 있어서 필요하기 때문에 미리 설치해두시면 좋습니다. 말 나온 김에 MetaMask부터 설치를 진행하겠습니다.
▶ MetaMask 공식 홈페이지: https://metamask.io/

Metamask는 Chrome 확장 프로그램의 형태로 이용할 수 있습니다. 다운로드를 받아주세요.

Metamask를 처음 시작하면, 곧바로 지갑을 생성하여 관리할 수 있습니다.

약관에도 동의를 해주겠습니다.

이후에 비밀번호 설정창이 나오고 비밀번호를 입력하여 생성하면 다음과 같이 접속할 수 있습니다.

기본적으로 우리의 지갑은 [이더리움 메인넷]으로 설정되어 있습니다. 우리는 개발 목적으로 진행하고자 하므로, 일단 테스트넷으로 설정을 바꿀 필요가 있습니다.

[Ropsten 테스트넷]으로 변경합니다. 테스트넷은 말 그대로 개발자가 테스트를 쉽게 하기 위한 목적이므로 무료로 가상 이더를 입금 받을 수 있습니다. 따라서 가상의 이더를 입금 받기 위하여 [입금]를 누릅니다.

이후에 [이더 얻기] 버튼을 누릅니다.

그러면 Faucet에서 이더를 무료로 송금 받을 수 있습니다.

이 때 MetaMask가 동작하여 지갑을 연동하고 Faucet으로부터 이더를 얻게 됩니다.

약간의 시간이 흐른 뒤에 성공적으로 이더를 송금 받은 것을 확인할 수 있습니다.

이제 MetaMask에 대한 기본적인 사용 방법에 대해서 알아보았으므로, DApp 개발을 위한 개발환경을 구축합시다.
※ 사전 요구사항 구축 ※
가장 먼저 파이썬이 필요합니다. 파이썬 설치가 되어 있지 않다면, 공식 홈페이지에 접속하여 파이썬을 설치합니다.
https://www.python.org/downloads/
www.python.org
[Download] 버튼을 눌러 파이썬을 다운로드 받습니다.

[Add Python 3.7 to PATH]에 체크하여 기본 설정 그대로 설치를 진행합니다.


이후에 NPM을 설치하기 위해 node.js을 설치합니다. 공식 홈페이지에 접속하여 그대로 다운로드 하시면 됩니다.

마찬가지로 기본 설정 그대로 설치하면 됩니다.

또한 테스트넷 이외에도 Private 블록체인 환경을 구축해 놓는 것이 좋습니다. Ganache를 이용하면 손쉽게 우리 컴퓨터에 가상의 이더리움 네트워크가 생성됩니다.
https://www.trufflesuite.com/ganache
www.trufflesuite.com
기본 설정 그대로 설치하시면 됩니다.

Ganache는 Microsoft 응용 프로그램 형태로 설치가 가능하군요.

다만 앱 설치 과정에서 개발자 모드가 체크되어 있지 않다면 설치가 안 될 수 있습니다. 그럴 때는 개발자 모드 설정을 위하여 [설정]으로 이동할 수 있도록 합니다.

[개발자 모드]에 체크한 뒤에 다시 설치를 진행하면 됩니다.

Ganache가 설치 완료되면, 곧 바로 [QUICKSTART] 모드로 로컬 이더리움 네트워크 서버를 구동시킬 수 있습니다.


다음과 같이 10개의 기본적인 이더리움 지갑이 주어지고, 개발 테스트에 충분한 만큼의 이더리움이 미리 들어가 있는 것을 알 수 있습니다. 이제 이를 이용해 테스트 할 수 있습니다.

※ Truffle 개발환경 구축 ※
이제 본격적으로 Truffle을 이용해 개발환경을 구축합니다. 따라서 가장 먼저 Truffle을 설치합니다.
npm install -g truffle@5.0.2
이 때 python과 npm 모두 기본적으로 설치 되어 있어야 합니다.

저는 다음과 같이 truffle이 설치되었습니다.

이제 하나의 폴더를 만든 뒤에, 명령 프롬프트에서 해당 폴더로 이동하여 truffle 프로젝트를 초기화합니다.
truffle init

이후에 실제로 개발 환경은 JS를 함께 사용하여 진행하게 됩니다. npm init으로 종속성 설정을 하시면 됩니다.

이제 package.json 파일을 작성합니다. 일반적으로 DApp을 개발할 때 자주 사용되는 라이브러리가 종속성으로 작성되어 있습니다.
{
"name": "hello-world",
"version": "1.0.0",
"description": "",
"main": "truffle-config.js",
"directories": {
"test": "test"
},
"scripts": {
"dev": "lite-server",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"truffle": "5.0.2",
"truffle-contract": "3.0.6",
"nodemon": "^1.17.3",
"bootstrap": "4.1.3",
"chai": "^4.1.2",
"chai-bignumber": "^2.0.2",
"chai-as-promised": "^7.1.1",
"lite-server": "^2.3.0"
}
}
Visual Studio Code와 같은 에디터(Editor) 프로그램을 실행하여, 우리의 프로젝트 폴더에 접속합니다. 그리고 npm install을 입력해 필요한 라이브러리를 설치합니다.

이제 contracts 폴더에 HelloWorld.sol 파일을 생성합니다. 다음과 같이 작성합니다.
pragma solidity ^0.5.0;
contract HelloWorld {
uint public hello = 0;
}
hello라는 public 변수에 0이라는 값을 넣어 주었으므로, 누구든지 이 앱에 접근하여 hello라는 변수의 값을 확인할 수 있을 것입니다. 이제 Solidity 소스코드를 컴파일하여 Byte Code 형태로 변환합니다.
truffle compile

컴파일 결과 다음과 같이 build/contracts 폴더에 HelloWorld.json 파일이 생성됩니다.

truffle-config.js 소스코드를 수정하여 개발 전용 서버를 입력하여 연동합니다. 아까 설치한 Ganache 서버를 입력하면 됩니다. IP로는 로컬 호스트(Local Host)를 의미하는 127.0.0.1과 포트 번호로는 7545를 입력하면 됩니다.
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*"
}
},
compilers: {
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
}
}
Ganache 프로그램에서도 기본적인 포트는 7545 포트로 설정된 것을 확인할 수 있으므로, 이를 그대로 넣습니다.

이후에 /migrations 폴더에 2_deploy_contracts.js 파일을 생성합니다.
const HelloWorld = artifacts.require("HelloWorld");
module.exports = function(deployer) {
deployer.deploy(HelloWorld);
};
이후에 truffle migrate를 입력하여 Deploy를 진행해보세요.

스마트 컨트랙트 배포 결과 그 비용으로 약간의 이더리움이 차감된 것을 확인할 수 있습니다.

이제 truffle console 명령을 입력하여 콘솔 환경에서 스마트 컨트랙트 정보를 확인합니다.

'블록체인' 카테고리의 다른 글
| 이더리움(Ethereum) DAO 재귀 함수 해킹 사례 (1) | 2018.04.09 |
|---|---|
| 이더리움(Ethereum) 도스(DoS) 공격 사례 (0) | 2018.04.09 |
| 이더리움(Ethereum)의 개요 (0) | 2018.04.09 |
