August 18, 2022

How to call solidity functions with Web3, metamask library

Public view/pure functions can be simply called. However, in other cases, you need to log in because of gas fee. It can be done with metamask.


public view/pure 함수는 간단히 호출할 수 있다. 그러나 그 외의 경우는 가스비를 제출해야하므로 로그인이 필요하다. 이를 위해 여기서는 메타마스크를 활용하는 방법을 알아본다.



1. public view/pure function

<script src="https://cdn.jsdelivr.net/npm/web3@1.7.3/dist/web3.min.js"></script>

<script>
const rpcPolygon = "https://polygon-rpc.com";
let web3 = "";
let contract1 = "";
async function main(){
    web3 = await new Web3(rpcPolygon);
    contract1 = await new web3.eth.Contract( [ABI], [Contract Address] );
} main();

async function callTmp(){
    contract1.methods.[function name]().call({from: [wallet address]})
    .then(function(result){
        console.log(result);
    })
    .catch(async function(e){
        console.log(e);
    });
}
</script>


Write the JavaScript code as above. It is used by calling the callTmp() function when necessary.


위와 같이 자바스크립트 코드를 작성한다. 필요할 때 callTmp() 함수를 호출하여 사용한다.

 

 

2. public function

<script src="https://cdn.jsdelivr.net/npm/web3@1.7.3/dist/web3.min.js"></script>

<script>
let web3 = "";
let contract1 = "";
async function main(){
    web3 = await new Web3(window.ethereum);
    contract1 = await new web3.eth.Contract( [ABI], [Contract Address] );
} main();

async function callTmp(){
    let param = {
        from: [my address],
        to: [contract1 address],
        value: [send coins if you want],
        data: contract1.methods.[function name]().encodeABI()
    };

    ethereum.request(
    {
        method: 'eth_sendTransaction',
        params: [param]
    })
    .then(async function(txHash){
        let receipt = null;
        while(receipt == null){
            receipt = await web3.eth.getTransactionReceipt(txHash);
            await sleep(3000);
        }
        console.log("Txhash:", receipt.transactionHash);
    })
    .catch(async function(error){
        console.log(error);
    });
}

async function sleep(milliseconds) {
    return new Promise(resolve => setTimeout(resolve, milliseconds))
}
</script>


Metamask uses the ethereum.request() function to generate a transaction. As before, proper use of the callTmp() function can help.


메타마스크에서는 트랜잭션 발생을 위해 ethereum.request() 함수를 사용한다. 이전과 마찬가지로 callTmp() 함수를 적절히 사용하면 도움이 될 수 있다.


August 17, 2022

How to initialize Web3 library in Javascript

To use Web3, there are two ways to enter an RPC address or use a metamask.
Web3를 사용하려면 RPC 주소를 입력하거나 메타마스크를 이용하는 방법이 있다.

 

1. Using RPC Address (Polygon Network).
1. RPC 주소를 입력하는 방법(폴리곤 네트워크).

<script src="https://cdn.jsdelivr.net/npm/web3@1.7.3/dist/web3.min.js"></script>

<script>
const rpcPolygon = "https://polygon-rpc.com";
let web3 = "";
let contract1 = "";
async function main(){
    web3 = await new Web3(rpcPolygon);
    contract1 = await new web3.eth.Contract( [ABI], [Contract Address] );
} main();
</script>



2. Using metamask.
2. 메타마스크를 이용하는 방법.

<script src="https://cdn.jsdelivr.net/npm/web3@1.7.3/dist/web3.min.js"></script>

<script>
let web3 = "";
let contract1 = "";
async function main(){
    web3 = await new Web3(window.ethereum);
    contract1 = await new web3.eth.Contract( [ABI], [Contract Address] );
} main();
</script>


April 13, 2022

Square CTF postfuscator write up

 

< getFlag #4, Own this NFT! (Link) >


▶ How to play
Download the provided file(Link).
제공되는 파일 다운로드.

The humans who designed C9 were afraid that the Charvises would disavow their pact.

인류는 차비스가 약속을 파기할 가능성에 대해 두려워했다.

The humans therefore decided to build an additional defense system, C9, using an ancient programming language. A programming language that Charvises didn’t even know is a programming language!

그래서 그들은 추가 방호 시스템인 C9을 구축하게 된다. 이때 고대의 프로그래밍 언어를 사용하였는데, 차비스는 그 내용이 프로그래밍 언어인지조차 인지하지 못하였다.

Can you figure out the correct input?
관련하여 올바른 입력값을 찾도록 한다.

 

여기서 말하는 고대 언어는 포스트스크립트이다. 쉘 스크립트 파일이 제공되지만 이는 포스트스크립트(PS) 파일을 추출하기 위한 용도이다. 포스트스크립트는 문서를 기술하기 위한 언어(PDL)이며 인터프리터가 존재하며 구글드라이브에서도 열람할 수 있다. PS 파일을 이해하고 요구사항을 준수하여 입력값을 구성하면 플래그를 획득할 수 있다.

The ancient language we are talking about here is PostScript. A shell script file is provided, but this is for extracting a PostScript(PS) file. PostScript is a language for describing documents(PDL), has an interpreter, and also can be viewed on Google Drive. If you understand the PS file and configure the input to comply with the requirements, you can get the flag.

 

 

Hint 1.

A proper debugger can help save time.

적절한 디버거는시간을 단축하는 데 도움이 된다.

https://github.com/luser-dr00g/debug.ps

 

Hint 2.

PostScript works on a stack basis. As soon as a string is entered, it is already put in the stack.

포스트 스크립트는 스택 기반으로 동작한다. 문자열을 입력하는 순간 스택에 들어간다.

 

Hint 3.

XOR operation is everything.

XOR 연산이 전부이다.

 

 

* Check the link below for full write-up details.   

* 전체 라잇업 내용은 아래 링크 확인.    

 

< FULL WRITE UP >

 

 

March 11, 2022

Square CTF 2018 gofuscated write up

 

< Success #3, Own this NFT! (Link) > 

Just click the ♡ of the NFT to receive the free airdrop.


▶ How to play
Download the provided file(Link).
제공되는 파일 다운로드.

The very first settlers didn't have a lot of confidence in their hand-assembled C6 system. They therefore built C7, an advanced defense system written in Golang.
초기에 제작된 C6 시스템은 저수준 언어로 한땀 한땀 제작되었으나 확신을 주지 못했다. 그래서 이후 C7 시스템을 Go 언어로 견고하게 제작하여 도입하였다.

Given the source code, can you find the correct input?
여기 그 소스 코드가 있다. 올바른 입력값을 찾도록 한다.

 

The source code is provided and it is a reversing challenge to analyze it. In the past, challenges with the -fuscated keyword were characterized by difficulties in understanding due to rarely used grammar, etc., but there is a possibility this time as well.

소스 코드가 제공되며 이를 분석하는 리버싱 챌린지이다. 과거에도 -fuscated(혼란스러운) 키워드가 붙은 챌린지는 잘 활용하지 않는 문법 등으로 이해하기 어려운 것이 특징이었는데 이번에도 그럴 가능성이 있다.

 

Hint 1. 

Changing the order of the source code allows for quick testing.

소스 코드의 순서를 변경하면 빠른 테스트를 수행할 수 있다.


Hint 2.

You must pass the test to get the correct flags.

테스트를 통과해야 올바른 플래그를 획득할 수 있다. 


Hint 3.

Characteristics of random functions.

랜덤 함수의 특징.


 

* Check the link below for full write-up details.   

* 전체 라잇업 내용은 아래 링크 확인.    

 

< FULL WRITE UP >


February 22, 2022

Square CTF 2018 gates of hell write up

< Success #2, Own this NFT! (Link) > 

Just click the ♡ of the NFT to receive the free airdrop. 


▶ How to play
# docker run --rm --env PORT=80 -p 8081:80 squarectf/gates-of-hell

C6 is a Linux based system. It was brought to Charvis by the very first settlers. You found a USB drive with a copy of the executable.

C6은 리눅스 기반 시스템으로, 초기 정착민들이 차비스로부터 가져왔다. 여기 USB에 해당 시스템의 복사본 실행 파일이 있다.

Now, all you need to do is figure out the correct input to disable C6 through its online interface.

이제, 해당 시스템의 온라인 인터페이스에 올바른 값을 입력하여 비활성화한다.

 

This is a reversing challenge where an online interface and an executable file are provided for analyzing. The provided file is gates_of_hell.tar.gz, and when decompressing twice, the gates_of_hell file is created. This is a 32-bit Linux executable file with symbol information removed. No other protection techniques such as PIE were applied.

온라인 인터페이스와 실행 파일이 제공되며 이를 분석하는 리버싱 챌린지이다. 제공되는 파일은 gates_of_hell.tar.gz이며 2회 압축 해제 시 gates_of_hell 파일이 생성된다. 이는 심볼 정보가 제거된 32비트 리눅스 실행 파일이다. 기타 PIE 등 보호 기법은 적용되지 않았다.

 

Hint 1. 

When entering parameters, do not exceed the 1-byte range.

파라미터를 입력할 때 1바이트 범위를 초과하지 않는다.


Hint2.

There is assembly code that cannot be viewed by the decompiler.

디컴파일러로 확인할 수 없는 어셈블리 코드가 존재한다.


 

* Check the link below for full write-up details.   

* 전체 라잇업 내용은 아래 링크 확인.    

 

< FULL WRITE UP > 


February 01, 2022

How to print coordinates on the screen with Python

 


 

import matplotlib.pyplot as plt

x = [100, 500, 100, 500 ]
y = [100, 500, 500, 100 ]

plt.fill(x, y, color="lightgray")
plt.show()

 

Using Python's matplotlib module, displaing coordinates is simple. However, the system must support GUI.

파이썬의 matplotlib 모듈을 이용하면 간단히 좌표를 표시할 수 있다. 다만, 시스템이 GUI를 지원해야 한다.

 

Make two lists to store X, Y coordinates. And enter it in the fill() function. Then, the coordinates are automatically represented by the pair. If you specify a color in the color option, you can paint the interior of the coordinate.

x, y 좌표는 각각의 리스트로 생성한다. 이를 fill() 함수에 입력하면 자동으로 쌍을 지어 좌표가 표현된다. color 옵션에 색을 지정하면 좌표 내부 공간을 칠할 수도 있다.

 

How to convert TTF to TTX(XML) with Python


Converting font files using Python is simple. Just call the saveXML() function of the fontTools module. 

 

파이썬을 이용한 폰트 파일 변환은 간단하다. fontTools 모듈의 saveXML() 함수를 호출하면 된다.


from fontTools.ttLib import TTFont

font = TTFont("xxx.ttf")
font.saveXML("xxx.ttx")

1. Input TTF and create an object with TTFont().
2. Call the saveXML() method of the object to save it.
3. Check the generated TTX file in the same directory as the Python file.

1. TTF를 입력하여 TTFont()로 객체를 생성한다.
2. 해당 객체의 saveXML() 메소드를 호출하여 저장한다.
3. 파이썬 파일과 같은 디렉터리에 생성된 TTX 파일을 확인한다.