디컴파일 툴 없이 이미지매직만으로 디컴파일된 이미지 만들기 기본입니다.

파일의 npTc 바이트를 읽어서 그려넣기 입니다.

특정 문자열 바이트의 위치 확인을 위해서 gnu_grep 을 썼습니다.


png9=test.9.png

#png=kbbank.png

rpng=resized_$png9

mpng=mod_$png

mpng9=$rpng.9.png


ww=$( convert $png9 -format "%[fx:w]" info: )

hh=$( convert $png9 -format "%[fx:h]" info: )

- 이미지의 가로 세로 해상도를 알아냅니다.


echo original

echo $png9

echo $ww x $hh


npTc=$( gnu_grep --byte-offset --only-matching --text npTc $png9 | cut -d":" -f1 )

나인패치 이미지에서 헥사에디터로 봤을때 npTc 부분의 위치를 확인합니다.

옵션이 길지요. gnu_grep 에서 정상동작합니다.


IDAT=$( gnu_grep --byte-offset --only-matching --text IDAT $png9 | cut -d":" -f1 )


IHDR=$( gnu_grep --byte-offset --only-matching --text IHDR $png9 | cut -d":" -f1 )


echo

echo hdr $IHDR

echo npTc $npTc

lnpTc=$((IDAT-npTc))

snpTc=$((npTc-1))

echo lnpTc $lnpTc

echo snpTc $snpTc

echo dat $IDAT


#header=$((IDAT-1))


#echo modifying

#convert $png -resize $ww"!x"$hh"!" $rpng


#convert $png9 -fill cyan -stroke red -strokewidth 5 -draw "circle 30,30 30,20" $rpng


#convert $png9 -roll +10x0 $rpng


cp $png9 $rpng


pxcnt=$((npTc+5))

pycnt=$((npTc+6))

npTc 위치에서 5번째 뒤에 오는게 가로에 찍히는 점의 갯수입니다.

(이미지의 북쪽에 늘이는 부분에 찍는 작은점 말이지요)

6번째가 세로축 점의 갯수이구요.


plt=$((npTc+19))

prt=$((npTc+23))

pup=$((npTc+27))

pdn=$((npTc+31))

19,23,27,31 번째 바이트는 남쪽과 동쪽에 문자 등이 들어갈 영역을 지정하는 위치입니다.

(우측과 하단 그러니까 2번쨰와 4번째 값은 좌표가 아닌 우측, 하단에서 시작해서 남겨지는 공간을 의미합니다. 좌표로 계산하려면 가로폭, 세로높이에서 각각 뺴줘야 합니다.)


pxx1=$((npTc+39))

pxx2=$((npTc+43))

pyy1=$((npTc+47))

pyy2=$((npTc+51))

이 위치 4개는 북쪽과 서쪽에 늘이는 부분의 좌표입니다.

복수로 존재할 수도 있는데 그 경우엔 가로 먼저 모두 나열되고 뒤에 세로가 찍힙니다. 4씩 늘여져 있는데 이게 이미지가 아주 크면 4바이트 모두를 계산해야 하지만 편의상 마지막 바이트만 잡았습니다.


xcnt=$( hexdump -s $pxcnt -n 1 $png9 | cut -c 9- )

dxcnt=$((16#${xcnt}))


ycnt=$( hexdump -s $pycnt -n 1 $png9 | cut -c 9- )

dycnt=$((16#${ycnt}))


ltv=$( hexdump -s $plt -n 1 $png9 | cut -c 9- )

dltv=$((16#${ltv}))


rtv=$( hexdump -s $prt -n 1 $png9 | cut -c 9- )

drtv=$((16#${rtv}))


upv=$( hexdump -s $pup -n 1 $png9 | cut -c 9- )

dupv=$((16#${upv}))


dnv=$( hexdump -s $pdn -n 1 $png9 | cut -c 9- )

ddnv=$((16#${dnv}))


xx1v=$( hexdump -s $pxx1 -n 1 $png9 | cut -c 9- )

dxx1v=$((16#${xx1v}))


xx2v=$( hexdump -s $pxx2 -n 1 $png9 | cut -c 9-  )

dxx2v=$((16#${xx2v}))


yy1v=$( hexdump -s $pyy1 -n 1 $png9 | cut -c 9-  )

dyy1v=$((16#${yy1v}))


yy2v=$( hexdump -s $pyy2 -n 1 $png9 | cut -c 9- )

dyy2v=$((16#${yy2v}))


dyy2v=$((16#${yy2v})) 이 명령은 16진수인 yy2v 변수를 10진수로 변환해서 dyy2v 에 저장합니다.


echo

echo "pxcnt" $pxcnt "dxcnt" $dxcnt

echo "pycnt" $pycnt "dycnt" $dycnt

echo

echo "plt" $plt "dltv" $dltv

echo "prt" $prt "drtv" $drtv

echo "pup" $pup "dupv" $dupv

echo "pdn" $pdn "ddnv" $ddnv

echo

echo "pxx1" $pxx1 "dxx1v" $dxx1v

echo "pxx2" $pxx2 "dxx2v" $dxx2v

echo "pyy1" $pyy1 "dyy1v" $dyy1v

echo "pyy2" $pyy2 "dyy2v" $dyy2v


www=$((ww+1))

hhh=$((hh+1))

ddrtv=$((www-drtv))

dddnv=$((hhh-ddnv))

가로 세로 늘여지는 픽셀을 대비해서 사이즈 늘이고 남겨지는 부분의 여백을 가로, 높이에서 빼서 좌표로 바꾸는 동작입니다.


echo $dltv $ddrtv

echo $dupv $dddnv


convert $rpng -bordercolor white -compose Copy -border 1x1 -stroke black -draw "line $dxx1v,0 $dxx2v,0" -draw "line 0,$dyy1v 0,$dyy2v" -draw "line $dltv,$hhh $ddrtv,$hhh" -draw "line $www,$dupv $www,$dddnv" $mpng9


마지막에 이미지매직 코드는 컴파일된 이미지에 테두리 1픽셀씩 늘여서 점을 직접 찍어주게 했습니다.
-b0rdercolor white 는 그냥 잘 보이게 흰색으로 그린 것이고 실제로는 white 대신 none 으로 해야 합니다.



이런 원본이 아래처럼 디컴파일 된 이미지가 보여집니다.


이게 꼭 필요한 것은 아닌데 그냥 학문적 호기심에서 시작했네요.



간단하게 정리하면 npTc 바이트의 구조를 알아서 hexdemp 로 바이트 값을 뽑고 이미지매직으로 그려주기 입니다.

Extra Form
첨부
gnu_grep  [File Size:269.7KB/Download:0]
ing.sh  [File Size:3.8KB/Download:1]
test.9.png  [File Size:2.8KB/Download:0]
resized_test.9.png.9.png  [File Size:3.2KB/Download:2]
댓글을 남겨야 다운로드가 가능합니다. 감사의 댓글을 달고 오른쪽 확인버튼을 눌러주세요.
다운로드시 일주일에 한개 이상의 게시물 작성이 필요합니다. 지금 자유게시판에 회원님의 하루를 남겨보세요.
추천♡버튼을 잊지 마세요. 추천인과 회원님 모두 포인트가 적립됩니다.

짱구삼촌 님의 SIGNATURE

profile

그래도 아직은 사랑이, 낡은 외투처럼 너덜너덜해져서 이제는 갖다 버려야 할, 그러나 버리지 못하고...

"신은 그저 질문하는 자일 뿐... 운명은 내가 던지는 질문이다. 답은 그대들이 찾아라."

댓글 5
  • profile
    aapt crunch -v -S ./res -C ./res_out 디컴파일된 이미지를 다시 컴파일하는 방법입니다. aapt 바이너리는 폰용, PC 용 모두 있습니다. 제 경우엔 이젠 나인패치 이미지를 폰에서 디컴, 컴파일 모두 가능하게 되었습니다. ^^*
  • ?
    칼카스
    15.05.14
    이제 박사학위 받으셔도 될것 같습니다만. ㅎㅎ
  • profile
    ㅎ 근데 이게 따지고 들면 java 로는 아주 쉽게 할 수 있는데 이런 짓거리를 하고 있다는 사실이지요 ㅋ 자바를 전혀 모르는 절름발이의 비명이라고 보시면 됩니다. ㅋ
  • profile
    이게...AutoCopySign배치파일처럼 된다면 좋겠네요..그렇지않고서는 제 생각엔 아무래도 이 부분은 APKmanager작업이 아직은 편리하고 빠르지않나 봅니다.^^
  • profile
    그렇죠? 복수 이미지를 일괄 작업에 쓰기엔 쫌 ㅜㅡㅜ 폰에서 하나둘 처리하겠다는 생각에서 시작헌거라~
댓글 쓰기 권한이 없습니다.
정렬 목록 검색 쓰기
등록된 글이 없습니다.
1 - 2