|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=91 [복사]
현재 7~80% 가량밖에 완료되지 않았습니다.
이번 동영상은 들리지 않는 구간이 좀 많네요.
제대로 들리지 않은부분때문에 한글 번역 또한 쉽지 않았던거같네요.
이번주 조금 더 시간을 내어서 손좀 더 보겠습니다.
우선 지금까지 한 내용 올리겠습니다.
동영상 파트 7 내용...
um, I'm going to have to move on with the presentation here.
프레젠테이션을 계속 진행하겠습니다.
We're real short on time.
시간이 많지 않네요.
Um… But I did find the di….. function, w…. calling 'em.
It actually …… get through internet connection
이 함수는 직접 ….. 인터넷에 연결을 합니다.
and it sets up by default ……. 4:43 ……..
그리고 …. 의 디폴트 값을 4:43 으로 설정합니다.
so that's the example, and I apologize I didn't have little bit more time to demonstrate that.
지금까지 설명한게 말씀드린 예입니다. 데몬스트레이션을 위해 시간이 좀 부족하여 죄송합니다.
………….. this is what your idea that we have.
because … unpacked …..you get all of ……
your imports and all the ……..
pieces that you want to see.
Briefly ……. I didn't get to cover all of them.
간단히 설명하면 ……. 전체적으로 설명을 드리지 못했습니다.
Some of the main conventions that I use that I find, keep me on track, and work for me,
제가 주로 사용하는 conventions를 소개해 드리면, 음, 제가 사용하기에, 추적하기에, 저랑 가장 잘 맞는 방법은,
are to bond that analysis go through and find any return instructions,
분석을 하면서 분석된 내용을 bond하고 리턴 instruction에 대해 찾습니다.
those are places where your function ….
그런 부분들이 찾으려는 함수가 있는 곳 입니다.
Mark those first. Because then when you're going trying to figure out, ok, follow this function,
그 부분을 먼저 체크합니다.
it checks the return value, it seems to be 0 or 1, I don't know which one is success, I don't know which one is failure, oh,
리턴 값을 확인하면, 0 혹은 1일 것입니다. 어떤 값이 성공인지 실패인지 알지 못하지만,
guess what, this one goes straight to the return function, so that's probably my failure rates,
where the other one go straight down the rest of the, of the, function.
다른 부분을 함수를 끝까지 타고 내려갑니다.
Mark loops. The reason for those are when you are working on a function and there's bunch of these labels which all
루프는 표시하십시요. 표시하는 이유는 하나의 함수를 분석하면서 이러한 표시들이 모두 메모리 위치를 나타내는 것이면
initially saying, location of memory address,
if you just mark them as loops,
그냥 루프라고 표시를 해주면
and I don't ……. zero to one, or two, three, I don't care
그렇다면….. 0이든 1, 혹은 2, 3, 상관없습니다.
initially, what the loop does.
루프가 무엇을 하는지 -----??
Um, that's one more label that you don't have to identify, worry about naming.
그렇게 되면 또하나의 라벨을 확인할 필요 없고 명칭을 어떻게 해야할지 생각하지 않아도 됩니다.
Name your variables as quick as you can, um, even if you get it wrong initially
변수명에 명칭을 최대한 다세요. 명칭을 잘못 달더라도 말이죠.
often time you'll find a scratch variable that you've name something because it's …..
later on you find it being used for something completely different.
나중에 분석해 나가다보면 전혀 다른 용도로 사용하는것을 볼 수 있습니다.
What turns out to be a temp variable but at least you've named it, initially while you're working on the program.
임시변수로 확인되는 것도 볼수 있습니다. 그러나 표시를 했었다는 것, 프로그램을 분석하면서 미리 표시했다는 것이 중요합니다.
Name convention, by that I mean, when you're trace through a function, and you've got an option
…. jumps to …………
There two things you can do there.
이런 상황에서 두가지 옵션이 있습니다.
One is, name that label with where, how you got to it.
하나는, 라벨을 어떻게 그 위치에 가게 되었는지 적는 것입니다.
I, OK, I just checked my internet connection status, I got success, I'm going to name that label that I'm going to internet success.
OK, 방금 인터넷 연결을 확인하였고, 성공된 것을 확인하였으면, 라벨을 '인터넷 연결 성공' 으로 적을 것입니다.
That's actually easy, but that's not the most proper way to do it.
이렇게 적으면 쉽기는 합니다. 그러나
Reason being, ……..
more than one part of the program, that jumps to that label.
프로그램 여러군데에서 그 부분을 호출하게 됩니다. 그쪽 라벨로 진행을 하게되며,
See when you try name labels,
what I call the 'From Function', what the, what below that label, what it's function is, name it that.
So it turns out …… connection success,
it's says try the FTP, name it try the FTP.
FTP 연결 시도를 해보라고 되어있으면, 'FTP 시도'라고 적습니다.
Um.. I didn't get the chance to show you … tricks …
음, … trick 을 보여드릴 시간이 없었네요.
I'm short on time, but I have a register function
시간이 부족합니다. ….
to comment every single line. even really really obvious stuff.
모든 라인에 커멘트를 달아야합니다. 당연한 내용도 말이죠.
If you get something like xor %eax %eax, which is assembly shortcut for setting %eax to 0.
만약 xor %eax %eax 같은 명령어를 보게되면, %eax를 0으로 세팅하는 어셈블리어의 단축명령어 입니다.
I would go and tag a, uh, a, uh, comment and I'll write in eax = 0.
이러한 명령어는 eax = 0 이라고 커맨트를 답니다.
Reason for that is later on, when I'm going up the function there is ….
이렇게 적는 이유는 나중에 어떠한 함수를 따라가다보면
comment sticks out that tells me where exactly eax is now for me to figure out again.
eax가 현재 어떤 값인지 정확하게 알려주는 커멘트를 볼수 있습니다.
So I try to comment every single line.
그래서 모든 라인에 커맨트를 답니다.
I think these are some of the habits of people who have some experience doing disassembly.
제 생각에는 디스어셈블리에 대해 경험이 있으신 분들은 대부분 이런 방식으로 표시를 합니다.
I talked with Rico about this a bit, and he tell me he does almost exactly the same sort of things.
리코와 이러한 내용에 대해서 얘기를 해봤습니다. 그가 말하기를 저와 거의 같은 방식으로 표시를 한다고 합니다.
If you're ….. beginner …some of these tips will hopefully be helpful.
만약 당신이 ….. 초보… 제가 말씀 드리는 몇가지의 팁이 도움이 되겠군요.
Again, moving on quickly, some of the barriers we find here in disassembly.
다시, 조금 빨리 진행하겠습니다. 디스어셈블리를 하다보면 여러 장해물을 만나게 됩니다.
Packing and crypting which Rico's going to demonstrate, … haven't a lot of time but
패킹과 크립팅에 대해서는 리코가 데몬스트레이션을 진행하겠습니다….. 많은 시간이 남아 있지는 않지만
we're going to do our best to do a demonstration here.
데몬스트레이션을 모두 보여드릴수 있도록 최선을 다 하고 있습니다.
….. off the orientation.
I just showed you a bunch of places where, um, C++ is causing a little bit of grief.
C++가 짜증나게하는 몇몇 부분을 보여드렸습니다.
Um, I didn't show it there … example, I didn't have the time too,
여기서는 보여드리지 않았는데 …. 시간이 부족하였습니다.
C stream, um, libraries extensively, and unfortunately
C 스트림, 음,
IDA Pro doesn't have signatures for those.
IDA Pro는 이러한 것들의 시그니쳐를 가지고 있지 않습니다.
So there where good couple of dozen C stream functions that, um, I didn't know exactly
그래서 여기서 보면 2-30개의 C 스트림 함수에 대해서, 음, 저도 제대로 알지 못했으며
what they where, so I, um, I'm guess in bunch of places.
무엇인지도 몰랐습니다. 그래서, 음, 여러군데에서 guess를 해야했습니다.
And it's really no fun, ……. a library call.
그리고 진짜 이러한 …… 라이브러리 호출은 재미없습니다.
It's complicated and feels like you've wasted your time when you are done
매우복잡하며 끝난 다음에 시간을 완전 낭비한 느낌이죠.
because it's just a string copy, or something like that.
왜냐하면 하는 것은 단순한 스트링 복사나 그런 단순한 작업이거든요.
P-Code, um, there's
P-코드, 음,
Visual Basic or Jar file.
Which are semi-interpretive functions.
세미-interpretive 함수가 있습니다.
some, um, you know, P-code
this is the, uh, the terminal language, and those can some times be a challenge.
이것은, 음, 터미널 언어 입니다. 그리고 어떤 상황에서는 매우 challenging 합니다.
There's not a lot of really fantastic tools, I'm looking for analyzing some of those things, um,
이런것을 하기위한 멋진 툴이 있지는 않습니다. 이런 것을 해주는 그런 멋진 툴을 찾고 있긴 합니다… 만은…
anti-virus companies have
백신 업체에서도 ...
… of tools that they don't share.
공개하지 않는 툴이 있을듯 합니다.
And you'll find a few if you go to a search engine.
검색 엔진을 사용해서도 몇개 찾을수 있을 겁니다.
And some of the applications are pain in the butt too.
그리고 몇몇 어플리케이션은 진짜 짜증납니다.
Where you go and over-written by something else.
IDA Pro doesn't have a great way to to represent this.
IDA Pro는 이러한 것을 표시하는 방식이 좋지 않습니다.
|
Hit : 3136 Date : 2011/08/22 11:25
|