바이너리 파일 컴파일 해제

kanjaggy의 이미지

*.bin 으로 만들어진 파일들을 종종 만나곤 합니다.
물론 아무 생각 없이 chmod 777이든 권한 변경하고 설치만 했었는데
이거 역으로 디컴파일이든 압축 해제 같은 방법으로
설치 파일을 나눠 보고 싶은데 혹시 방법이 없는지요

어떻게 bin파일로 만들었는짖 bin파일 만들기 전에는 무엇이 있었는지 궁금해서요

freestyle의 이미지

bin 파일은 binary, 말 그대로 이진 데이터를 갖고 있는 파일입니다.

저는 간단하게 시스템에서 CPU가 바로 읽고 해석할 수 있는 형태의 명령으로 이해하고 있습니다.

jdk 설치용으로 제공되는 .bin의 경우는 자동 압축해제 명령이 앞에 붙어 있는 경우입니다.
(아직 그 내용을 직접 해석 해보지는 않았습니다)

압축해제 되면서 명령이 바로 실행되어 설치되는 것이지요.

몇몇 디어셈블러 등을 통해서 그 이전 형태의 모습을 비슷하게 추적할 수 있으나,

원래 소스가 어떤 형태인지 제작자가 특별히 넣어주지 않는다면

알 수 없습니다. 어셈블리를 분석해야겠지요.

아래는 제 시스템에서 테스트한 예제입니다.

# nasm nasm_test1.asm -f bin -o nasm_test1.bin -l nasm_test1.lst

nasm_test1.dmp 파일이 nasm_test1.bin을 역어셈한 내용입니다.

# ndisasm -b 32 nasm_test1.bin > nasm_test1.dmp

보다 자세한 내용은 역어셈||disassembly 등을 참고해 보세요.

[root@fedoraTest gas_and_nasm]# cat nasm_test1.asm
global _start
 
_start:
mov eax, 1
mov ebx, 0
int 80h
 
-rw-r--r--  1 root root  296 2009-05-17 08:24 nasm_test1
-rw-r--r--  1 root root   53 2009-05-17 06:52 nasm_test1.asm
-rw-r--r--  1 root root   14 2009-05-17 08:22 nasm_test1.bin
-rw-r--r--  1 root root  197 2009-06-04 10:57 nasm_test1.dmp
 
 
nasm_test1:     ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), stripped
nasm_test1.asm: ASCII text
nasm_test1.bin: data
nasm_test1.dmp: ASCII text
 
 
[root@fedoraTest gas_and_nasm]# ll
합계 28
drwxr-xr-x  2 root root 4096 2009-06-04 11:07 ./
drwxr-x--- 19 root root 4096 2009-06-04 10:57 ../
-rw-r--r--  1 root root  296 2009-05-17 08:24 nasm_test1
-rw-r--r--  1 root root   53 2009-05-17 06:52 nasm_test1.asm
-rw-r--r--  1 root root   14 2009-06-04 11:07 nasm_test1.bin
-rw-r--r--  1 root root  197 2009-06-04 10:57 nasm_test1.dmp
-rw-r--r--  1 root root  293 2009-06-04 11:07 nasm_test1.lst
 
[root@fedoraTest gas_and_nasm]# xxd nasm_test1.bin
0000000: 66b8 0100 0000 66bb 0000 0000 cd80       f.....f.......
 
[root@fedoraTest gas_and_nasm]# xxd nasm_test1
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0100 0300 0100 0000 0000 0000 0000 0000  ................
0000020: 8800 0000 0000 0000 3400 0000 0000 2800  ........4.....(.
0000030: 0400 0300 0000 0000 0000 0000 0000 0000  ................
0000040: b801 0000 00bb 0000 0000 cd80 0054 6865  .............The
0000050: 204e 6574 7769 6465 2041 7373 656d 626c   Netwide Assembl
0000060: 6572 2032 2e30 332e 3031 0000 2e73 6873  er 2.03.01...shs
0000070: 7472 7461 6200 2e74 6578 7400 2e63 6f6d  trtab..text..com
0000080: 6d65 6e74 0000 0000 0000 0000 0000 0000  ment............
0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b0: 0b00 0000 0100 0000 0600 0000 0000 0000  ................
00000c0: 4000 0000 0c00 0000 0000 0000 0000 0000  @...............
00000d0: 1000 0000 0000 0000 1100 0000 0100 0000  ................
00000e0: 0000 0000 0000 0000 4c00 0000 1f00 0000  ........L.......
00000f0: 0000 0000 0000 0000 0100 0000 0000 0000  ................
0000100: 0100 0000 0300 0000 0000 0000 0000 0000  ................
0000110: 6b00 0000 1a00 0000 0000 0000 0000 0000  k...............
0000120: 0100 0000 0000 0000                      ........
 
[root@fedoraTest gas_and_nasm]# cat nasm_test1.dmp
00000000  66B80100          mov ax,0x1
00000004  0000              add [eax],al
00000006  66BB0000          mov bx,0x0
0000000A  0000              add [eax],al
0000000C  CD80              int 0x80

-------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

kanjaggy의 이미지

nasm을 설치하고 위와 같이 실행 해봤는데

# nasm nasm_test1.asm -f bin -o nasm_test1.bin -l nasm_test1.lst

요 문장을 실행하니
bin 파일이 자동 삭제 되버리네요;;;; 덤프 뜰세도 없이;;;
ㅜ.ㅜ

danskesb의 이미지

그런데 대개 저런 식으로 배포되는 프로그램은, 인스톨러 옵션 중 압축만 푸는 게 있거나, 임시 폴더에 압축을 푼 후 실행되는 방식이기 때문에 굳이 어렵게 역어셈블하실 필요가 없습니다. 대개 도움말은 -h 옵션이므로, 도움말을 보고 압축만 푸는 옵션을 사용하거나 임시 폴더를 통째로 복사하십시오.

---- 절취선 ----
http://blog.peremen.name

redneval의 이미지

파일 포맷부터 알아보시기 바랍니다.
다음 명령어로 어떤 포맷인지 알아보실 수 있습니다.
file -b FILENAME

--------------------Signature--------------------
Light a candle before cursing the darkness.

kanjaggy의 이미지

file -b (파일이름) 한 결과
ELF 32-bit LSB executable, Intel 80386, version 1(SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.2.5, stripped
라고 나오네요
이게 무슨 뜻인가요

아참 그리고 파일 파일 다음에 -h 라고 붙이니 too many arguments라고 뜨네요 아마 추가옵션을 못붙이게 되있는거 같습니다.
그냥 인스톨만 되는 파일인지라
설치되는 경로도 파악 할수가 없어서요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.