WEBVTT

1
00:00:00.080 --> 00:00:03.480
<v Speaker 1>Welcome to the deep dive. Today. We're going deep, deep

2
00:00:03.520 --> 00:00:06.320
<v Speaker 1>into reverse engineering. We've got a whole stack of stuff

3
00:00:06.320 --> 00:00:08.679
<v Speaker 1>on By eighty six and By sixty four, oh and

4
00:00:08.800 --> 00:00:12.519
<v Speaker 1>aram architectures two of course, and then to wrap things up,

5
00:00:12.560 --> 00:00:15.279
<v Speaker 1>we're going to we're diving into the Windows kernel.

6
00:00:15.400 --> 00:00:17.559
<v Speaker 2>Wow, that's quite the lineup. It sounds like we're in

7
00:00:17.600 --> 00:00:18.879
<v Speaker 2>for a wild ride.

8
00:00:18.679 --> 00:00:22.399
<v Speaker 1>Definitely, and judging by your sources, you're interested in not

9
00:00:22.559 --> 00:00:25.719
<v Speaker 1>just like the theory, but like how this stuff actually

10
00:00:25.800 --> 00:00:26.920
<v Speaker 1>works in the real world.

11
00:00:26.760 --> 00:00:29.839
<v Speaker 2>Right, Absolutely, the practical applications are just as important as

12
00:00:29.839 --> 00:00:32.759
<v Speaker 2>the underlying concepts. I mean, how can you really understand

13
00:00:32.799 --> 00:00:34.520
<v Speaker 2>something without seeing it in.

14
00:00:34.520 --> 00:00:36.920
<v Speaker 1>Action exactly and maybe even take a peek at how

15
00:00:36.960 --> 00:00:40.159
<v Speaker 1>some less than ethical folks might be using this knowledge.

16
00:00:40.359 --> 00:00:42.880
<v Speaker 2>Well, knowledge is a double edged sword, isn't it. It

17
00:00:42.880 --> 00:00:44.240
<v Speaker 2>all depends on whose hands it's in.

18
00:00:45.079 --> 00:00:47.679
<v Speaker 1>True enough, Now, you brought up a really interesting point

19
00:00:47.679 --> 00:00:50.560
<v Speaker 1>earlier about how much easier it is to find information

20
00:00:50.640 --> 00:00:52.240
<v Speaker 1>on reverse engineering these days.

21
00:00:52.399 --> 00:00:55.000
<v Speaker 2>Yeah, it's night and day compared to just fifteen years ago.

22
00:00:55.320 --> 00:00:58.399
<v Speaker 2>It's incredible how much this field has exploded. But with

23
00:00:58.439 --> 00:01:00.880
<v Speaker 2>all this information out there, it can be tough to

24
00:01:00.920 --> 00:01:02.960
<v Speaker 2>separate the wheat from the chaff right.

25
00:01:03.039 --> 00:01:05.400
<v Speaker 1>And that's where a deep dive like this comes in handy.

26
00:01:05.439 --> 00:01:07.640
<v Speaker 1>Don't you think we're not aiming to make you an

27
00:01:07.719 --> 00:01:11.799
<v Speaker 1>instant expert, but we can at least lay a solid foundation.

28
00:01:12.000 --> 00:01:16.799
<v Speaker 2>Exactly, And practical reverse engineering really emphasize that point too, like,

29
00:01:17.079 --> 00:01:19.959
<v Speaker 2>you can't just jump into this stuff without a solid

30
00:01:20.040 --> 00:01:21.319
<v Speaker 2>understanding of the basics.

31
00:01:21.480 --> 00:01:24.439
<v Speaker 1>So let's just assume for a second that our listener

32
00:01:24.519 --> 00:01:27.640
<v Speaker 1>already has that foundation. They've got the programming, the compilers,

33
00:01:27.680 --> 00:01:31.280
<v Speaker 1>the operating system knowledge. If reverse engineering is like say,

34
00:01:31.400 --> 00:01:34.480
<v Speaker 1>learning a foreign language, where would we even begin.

35
00:01:34.760 --> 00:01:37.560
<v Speaker 2>Well, think of it this way. The compiled code, the

36
00:01:37.599 --> 00:01:41.280
<v Speaker 2>assembly language that's essentially a machines language. Verse engineering is

37
00:01:41.319 --> 00:01:44.359
<v Speaker 2>all about dissecting that code, figuring out what the original

38
00:01:44.400 --> 00:01:45.319
<v Speaker 2>programmer intended.

39
00:01:45.480 --> 00:01:48.040
<v Speaker 1>Okay, so we're trying to understand the machine's language. But

40
00:01:48.599 --> 00:01:50.359
<v Speaker 1>how I mean it's not like we can just ask

41
00:01:50.400 --> 00:01:51.760
<v Speaker 1>the machine what it's thinking.

42
00:01:51.519 --> 00:01:53.840
<v Speaker 2>Right, I wish you were that easy. It's more like

43
00:01:54.319 --> 00:01:57.480
<v Speaker 2>trying to understand a conversation by observing the subtle cues

44
00:01:57.519 --> 00:02:00.000
<v Speaker 2>and gestures, even if you don't speak the language.

45
00:02:00.280 --> 00:02:03.040
<v Speaker 1>Ah, I see, We're looking for those subtle hints, those

46
00:02:03.040 --> 00:02:06.200
<v Speaker 1>little clues that revealed a bigger picture. Now your source

47
00:02:06.280 --> 00:02:09.759
<v Speaker 1>is focused on by eighty six, by sixty four and arm.

48
00:02:10.199 --> 00:02:13.719
<v Speaker 1>What makes these architectures so interesting for reverse engineering?

49
00:02:14.080 --> 00:02:17.680
<v Speaker 2>Well, each architecture has its own Yeah, its own dialect,

50
00:02:17.800 --> 00:02:20.560
<v Speaker 2>you could say, its own set of instructions and ways

51
00:02:20.560 --> 00:02:23.520
<v Speaker 2>of handling data with by eighty six and by sixty four.

52
00:02:23.599 --> 00:02:26.000
<v Speaker 2>For example, registers play a huge role.

53
00:02:26.240 --> 00:02:29.120
<v Speaker 1>Registers, right, like little storage containers inside the processor.

54
00:02:29.360 --> 00:02:31.680
<v Speaker 2>Yeah, but it's not just about what they store. It's

55
00:02:31.719 --> 00:02:34.639
<v Speaker 2>about Well, take the e flag guess register. A lot

56
00:02:34.680 --> 00:02:36.759
<v Speaker 2>of people just think it stores results, but it's actually

57
00:02:36.759 --> 00:02:37.840
<v Speaker 2>telling us a lot more than that.

58
00:02:38.000 --> 00:02:40.680
<v Speaker 1>Oh, you mean how it tells us how an operation went,

59
00:02:40.800 --> 00:02:42.560
<v Speaker 1>not just the outcome precisely.

60
00:02:42.759 --> 00:02:45.159
<v Speaker 2>E flag guess gives us insights into the conditions under

61
00:02:45.159 --> 00:02:47.599
<v Speaker 2>which the code was executed. It's like imagine being able

62
00:02:47.639 --> 00:02:49.400
<v Speaker 2>to see not just the outcome of a decision, but

63
00:02:49.479 --> 00:02:50.680
<v Speaker 2>the factors that led to it.

64
00:02:50.800 --> 00:02:53.960
<v Speaker 1>Wow, that's that's really powerful. It's like having access to

65
00:02:54.039 --> 00:02:56.960
<v Speaker 1>the decision making process itself. What else makes by eighty

66
00:02:57.000 --> 00:02:58.319
<v Speaker 1>six by sixty four standout?

67
00:03:00.319 --> 00:03:03.800
<v Speaker 2>Movement is another area where those subtle details really matter.

68
00:03:04.159 --> 00:03:07.719
<v Speaker 2>Take the SEES instruction, for instance, it's used to scan memory,

69
00:03:07.759 --> 00:03:10.520
<v Speaker 2>and it's a fundamental part of functions like strallin.

70
00:03:11.039 --> 00:03:14.039
<v Speaker 1>Strallin that rings a bell, doesn't it calculate the length

71
00:03:14.039 --> 00:03:15.199
<v Speaker 1>of a string exactly.

72
00:03:15.439 --> 00:03:18.520
<v Speaker 2>Even a simple operation like that relies on this memory

73
00:03:18.560 --> 00:03:19.400
<v Speaker 2>scanning instruction.

74
00:03:19.639 --> 00:03:22.199
<v Speaker 1>So even if we don't know exactly what SES does

75
00:03:22.240 --> 00:03:25.680
<v Speaker 1>at a low level, just seeing it pop up tells us, hey,

76
00:03:25.759 --> 00:03:28.639
<v Speaker 1>there's probably some string manipulation going on here.

77
00:03:28.759 --> 00:03:32.039
<v Speaker 2>That's the idea. It's like recognizing landmarks in a foreign city.

78
00:03:32.319 --> 00:03:34.719
<v Speaker 2>They help you orient yourself and understand the layout of

79
00:03:34.759 --> 00:03:35.199
<v Speaker 2>the code.

80
00:03:35.240 --> 00:03:37.919
<v Speaker 1>I like that analogy. So we're starting to see how

81
00:03:37.919 --> 00:03:40.560
<v Speaker 1>these low level details can unlock the secrets of those

82
00:03:40.639 --> 00:03:43.639
<v Speaker 1>higher level functions. What else should we know about by

83
00:03:43.759 --> 00:03:44.280
<v Speaker 1>eighty six?

84
00:03:44.319 --> 00:03:47.280
<v Speaker 2>By sixty four, Well, function calls and calling conventions are

85
00:03:47.360 --> 00:03:50.520
<v Speaker 2>absolutely crucial. You can think of calling conventions as the

86
00:03:51.000 --> 00:03:55.240
<v Speaker 2>rules of engagement for functions. They define how parameters are

87
00:03:55.319 --> 00:03:57.080
<v Speaker 2>past and how results are returned.

88
00:03:57.360 --> 00:03:59.479
<v Speaker 1>Oh so if a piece of code is breaking those rules,

89
00:03:59.560 --> 00:04:01.759
<v Speaker 1>that might be a sign that something fishy is going on.

90
00:04:02.159 --> 00:04:07.759
<v Speaker 2>Bingo malware, for example, might deliberately violate calling conventions to

91
00:04:07.800 --> 00:04:11.039
<v Speaker 2>make the code harder to analyze. It's like speaking a

92
00:04:11.159 --> 00:04:14.639
<v Speaker 2>language with a strange accent and unusual grammar.

93
00:04:14.439 --> 00:04:16.560
<v Speaker 1>Makes it harder for others to understand what you're saying.

94
00:04:16.560 --> 00:04:21.279
<v Speaker 1>That's a pretty sneaky tactic. Okay, so we've covered registers, data, movement,

95
00:04:21.399 --> 00:04:24.639
<v Speaker 1>function calls. What about the overall flow of the code.

96
00:04:24.879 --> 00:04:28.920
<v Speaker 1>How does assembly language handle things like loops and conditional statements.

97
00:04:29.120 --> 00:04:32.360
<v Speaker 2>Well, assembly doesn't have explicit keywords like if or else,

98
00:04:32.879 --> 00:04:37.480
<v Speaker 2>but it uses instructions like cmp and test for comparisons.

99
00:04:36.839 --> 00:04:40.519
<v Speaker 1>Cmpn test okay, and based on those comparisons.

100
00:04:39.879 --> 00:04:43.199
<v Speaker 2>The code can branch in different directions, effectively implementing those

101
00:04:43.279 --> 00:04:47.000
<v Speaker 2>higher level constructs. It's all about manipulating the flow of execution.

102
00:04:47.279 --> 00:04:50.759
<v Speaker 1>It's amazing how these simple instructions can create such complex behavior.

103
00:04:50.920 --> 00:04:53.399
<v Speaker 1>So by understanding these branching mechanisms, we can start to

104
00:04:54.399 --> 00:04:56.959
<v Speaker 1>trace the execution paths and figure out the logic behind

105
00:04:56.959 --> 00:04:58.199
<v Speaker 1>the code exactly.

106
00:04:58.360 --> 00:05:00.879
<v Speaker 2>It's like following a map where the road or instructions

107
00:05:01.079 --> 00:05:04.480
<v Speaker 2>and the intersections are those branching points, and the choices

108
00:05:04.519 --> 00:05:07.959
<v Speaker 2>made at each intersection they review the intended destination of

109
00:05:08.000 --> 00:05:08.480
<v Speaker 2>the code.

110
00:05:09.360 --> 00:05:11.720
<v Speaker 1>This is starting to feel less like deciphering a foreign

111
00:05:11.800 --> 00:05:15.160
<v Speaker 1>language and more like navigating a maze. What else is

112
00:05:15.199 --> 00:05:17.480
<v Speaker 1>there to know about by eighty six by sixty four.

113
00:05:17.839 --> 00:05:21.079
<v Speaker 2>Address translation is another fundamental concept. You need to be

114
00:05:21.120 --> 00:05:24.240
<v Speaker 2>able to distinct between virtual addresses, which is what your

115
00:05:24.279 --> 00:05:28.920
<v Speaker 2>code sees, and physical addresses the actual locations in memory, right.

116
00:05:28.839 --> 00:05:31.639
<v Speaker 1>That whole virtual memory thing. Why is that distinction so

117
00:05:31.720 --> 00:05:33.360
<v Speaker 1>important in reverse engineering?

118
00:05:33.680 --> 00:05:36.480
<v Speaker 2>Because it helps us understand how the operating system manages

119
00:05:36.519 --> 00:05:40.120
<v Speaker 2>memory and how code interacts with different layers of the system,

120
00:05:40.439 --> 00:05:41.680
<v Speaker 2>including the kernel space.

121
00:05:41.800 --> 00:05:44.399
<v Speaker 1>Okay, so it's about understanding the boundaries and who has

122
00:05:44.439 --> 00:05:46.759
<v Speaker 1>access to what. Now I know you brought a real

123
00:05:46.800 --> 00:05:49.879
<v Speaker 1>world example to help solidify our understanding of by eighty

124
00:05:49.920 --> 00:05:52.959
<v Speaker 1>six by sixty four. It looks like a snippet of malware.

125
00:05:52.720 --> 00:05:55.560
<v Speaker 2>Right, this is sample g Let's see how the theory

126
00:05:55.560 --> 00:05:58.040
<v Speaker 2>we've discussed applies to this nasty little piece of code.

127
00:05:58.079 --> 00:06:01.879
<v Speaker 1>Notice anything interesting The SIDT instruction jumps out of me.

128
00:06:01.959 --> 00:06:04.279
<v Speaker 1>That's it. Isn't that related to interrupts?

129
00:06:04.319 --> 00:06:07.000
<v Speaker 2>You've got it the interrupt descriptor table to be precise,

130
00:06:07.079 --> 00:06:10.959
<v Speaker 2>It's all about how the operating system handles interrupt.

131
00:06:10.720 --> 00:06:14.439
<v Speaker 1>Interrupts, right, like urgent messages that need immediate attention. So

132
00:06:14.560 --> 00:06:17.560
<v Speaker 1>if this malware is messing with the interrupt descriptor table.

133
00:06:17.720 --> 00:06:21.079
<v Speaker 2>It could potentially redirect those messages to its own code,

134
00:06:21.360 --> 00:06:24.639
<v Speaker 2>gaining control of critical system functions. It's a pre sneaky

135
00:06:24.639 --> 00:06:26.040
<v Speaker 2>way to hijack the system.

136
00:06:26.439 --> 00:06:29.920
<v Speaker 1>Wow, so even the small snippet reveals a lot about

137
00:06:29.959 --> 00:06:33.639
<v Speaker 1>the techniques used to hide malicious activities. This has been fascinating,

138
00:06:34.160 --> 00:06:36.319
<v Speaker 1>But let's move on to the world of AARM. What

139
00:06:36.399 --> 00:06:39.079
<v Speaker 1>are some of the key differences we should be aware of.

140
00:06:39.240 --> 00:06:41.560
<v Speaker 2>Well, the first thing you'll encounter with AARM is something

141
00:06:41.560 --> 00:06:45.240
<v Speaker 2>called thumb mode. It's like AARM has a split personality,

142
00:06:45.560 --> 00:06:48.680
<v Speaker 2>unlike by eighty six with its distinct mode some mode.

143
00:06:48.759 --> 00:06:50.759
<v Speaker 1>Okay, I'm intrigued. What's that all about?

144
00:06:51.079 --> 00:06:54.000
<v Speaker 2>ARM can switch between ARM and thumb states on the fly.

145
00:06:54.439 --> 00:06:56.879
<v Speaker 2>It's like trying to decipher a message where the language

146
00:06:56.879 --> 00:06:58.439
<v Speaker 2>suddenly changes mid sentence.

147
00:06:58.600 --> 00:07:01.680
<v Speaker 1>Wow. So ARM can change it's instruction set while it's running.

148
00:07:01.759 --> 00:07:04.680
<v Speaker 1>That seems needlessly complicated, not at all.

149
00:07:04.839 --> 00:07:07.920
<v Speaker 2>Thumb mode actually uses a more compact instruction set, which

150
00:07:07.959 --> 00:07:10.680
<v Speaker 2>is perfect for smaller devices or when code size needs

151
00:07:10.720 --> 00:07:12.600
<v Speaker 2>to be minimized. It's all about efficiency.

152
00:07:13.360 --> 00:07:16.199
<v Speaker 1>Ah, So it's like having two tools in one, each

153
00:07:16.240 --> 00:07:19.240
<v Speaker 1>optimized for different situations. But I can see how that

154
00:07:19.279 --> 00:07:21.439
<v Speaker 1>would make reverse engineering a bit more challenging.

155
00:07:21.879 --> 00:07:24.959
<v Speaker 2>Definitely adds a layer of complexity now compared to by

156
00:07:25.000 --> 00:07:29.160
<v Speaker 2>eighty six by sixty four, AARM has fewer general purpose registers,

157
00:07:29.399 --> 00:07:31.160
<v Speaker 2>but they each have a very specific role.

158
00:07:31.399 --> 00:07:34.360
<v Speaker 1>Okay, fewer registers, but each one with a specific purpose.

159
00:07:34.560 --> 00:07:38.000
<v Speaker 1>Does ARM have anything similar to the e F flags

160
00:07:38.040 --> 00:07:39.439
<v Speaker 1>register we talked about earlier?

161
00:07:39.560 --> 00:07:43.319
<v Speaker 2>It does. It's called the Current Program Status Register or CTSR.

162
00:07:43.560 --> 00:07:46.040
<v Speaker 2>Like E flags, it holds all sorts of information about

163
00:07:46.040 --> 00:07:49.240
<v Speaker 2>the processor state, including those all important condition flags.

164
00:07:49.319 --> 00:07:52.160
<v Speaker 1>Condition flags, right, those were crucial and by eighty six

165
00:07:52.199 --> 00:07:55.040
<v Speaker 1>by sixty four, but I'm guessing they work differently in AR.

166
00:07:55.519 --> 00:07:58.879
<v Speaker 2>You're right to be cautious. Aarm's condition flags have their

167
00:07:58.920 --> 00:08:01.800
<v Speaker 2>own quirks and the influence branching in a way that's

168
00:08:01.839 --> 00:08:04.800
<v Speaker 2>unique to this architecture. It's another reminder that we can't

169
00:08:04.800 --> 00:08:07.199
<v Speaker 2>just apply by eighty six logic to ARM and expect

170
00:08:07.199 --> 00:08:07.639
<v Speaker 2>it to work.

171
00:08:07.839 --> 00:08:11.079
<v Speaker 1>So each architecture has its own personality, its own way

172
00:08:11.079 --> 00:08:11.839
<v Speaker 1>of doing things.

173
00:08:12.240 --> 00:08:15.560
<v Speaker 2>Got it. What about data movement in ARM? How does

174
00:08:15.600 --> 00:08:16.879
<v Speaker 2>that compare to GAYD six.

175
00:08:17.319 --> 00:08:21.279
<v Speaker 1>You'll see familiar instructions like LDR and str for loading

176
00:08:21.319 --> 00:08:24.279
<v Speaker 1>and storing data from memory. But unlike bay At six,

177
00:08:24.639 --> 00:08:27.399
<v Speaker 1>ARM doesn't have those direct memory to memory moves. It

178
00:08:27.439 --> 00:08:29.959
<v Speaker 1>relies more on registers as intermediaries.

179
00:08:30.079 --> 00:08:32.000
<v Speaker 2>So it's a more restricted model.

180
00:08:32.159 --> 00:08:35.639
<v Speaker 1>You could say that, and you'll also encounter those push

181
00:08:35.720 --> 00:08:39.399
<v Speaker 1>and pop instructions essential for function calls and managing local

182
00:08:39.480 --> 00:08:40.399
<v Speaker 1>variables on the stack.

183
00:08:40.440 --> 00:08:43.759
<v Speaker 2>Okay, those sound familiar. Anything else about the ARM instruction

184
00:08:43.879 --> 00:08:45.240
<v Speaker 2>set that really stands out? Oh?

185
00:08:45.320 --> 00:08:49.799
<v Speaker 1>Absolutely, Arm's conditional execution is really something else. Imagine a

186
00:08:49.879 --> 00:08:53.440
<v Speaker 1>single instruction that can set the conditions for multiple following instructions.

187
00:08:53.480 --> 00:08:56.559
<v Speaker 2>Wait, so it's like a shorthand way of implementing conditional logic.

188
00:08:56.879 --> 00:08:59.840
<v Speaker 1>That's exactly what aarm's IT blocks allow you to do.

189
00:09:00.240 --> 00:09:02.559
<v Speaker 1>It's one of the things that makes reverse engineering airms

190
00:09:02.600 --> 00:09:04.960
<v Speaker 1>so interesting. You have to be aware of these subtle

191
00:09:05.159 --> 00:09:08.600
<v Speaker 1>yet powerful features that can really influence the flow of execution.

192
00:09:09.000 --> 00:09:12.480
<v Speaker 1>It's like those condition flags have a ripple effect, influencing

193
00:09:12.559 --> 00:09:15.279
<v Speaker 1>everything that comes after them. Now, I know you also

194
00:09:15.360 --> 00:09:18.679
<v Speaker 1>brought a sample of ARM malware for us to dissect.

195
00:09:18.759 --> 00:09:21.159
<v Speaker 2>Right, this is sample K. Let's take a look at

196
00:09:21.200 --> 00:09:24.480
<v Speaker 2>how this malware takes advantage of arm's unique features and

197
00:09:24.559 --> 00:09:28.440
<v Speaker 2>what challenges it presents for reverse engineers. The first thing

198
00:09:28.480 --> 00:09:31.759
<v Speaker 2>that jumps out is the extensive use of conditional execution.

199
00:09:32.399 --> 00:09:35.120
<v Speaker 1>So it's using those IT blocks we talked about makes sense.

200
00:09:35.120 --> 00:09:38.759
<v Speaker 1>It's like a dynamic maze where the walls can shift

201
00:09:38.799 --> 00:09:40.799
<v Speaker 1>based on certain conditions precisely.

202
00:09:41.200 --> 00:09:44.080
<v Speaker 2>And to make matters worse, it also leverages the link

203
00:09:44.080 --> 00:09:48.279
<v Speaker 2>register in some interesting ways, perhaps storing data temporarily or

204
00:09:48.320 --> 00:09:50.559
<v Speaker 2>even using it to obtuscate the flow of control.

205
00:09:50.720 --> 00:09:53.279
<v Speaker 1>It's like taking those unique features of ARM and turning

206
00:09:53.279 --> 00:09:56.240
<v Speaker 1>them into weapons to hide its malicious activities. This is

207
00:09:56.279 --> 00:09:58.399
<v Speaker 1>getting pretty intense. We've covered a lot of ground with

208
00:09:58.519 --> 00:10:01.320
<v Speaker 1>BY eighty six, BY sixty four and AIRM, but there's

209
00:10:01.399 --> 00:10:03.399
<v Speaker 1>one more piece of the puzzle. We need to address

210
00:10:03.919 --> 00:10:05.039
<v Speaker 1>the Windows.

211
00:10:04.600 --> 00:10:07.039
<v Speaker 2>Kernel, the heart of the operating system exactly.

212
00:10:07.600 --> 00:10:10.840
<v Speaker 1>But diving into kernel level code can be pretty intimidating.

213
00:10:11.039 --> 00:10:13.200
<v Speaker 1>What are the essential concepts we need to grasp.

214
00:10:13.559 --> 00:10:16.840
<v Speaker 2>Let's start with that concept of user space versus kernel space,

215
00:10:17.120 --> 00:10:20.320
<v Speaker 2>that layered cake we talked about earlier. Kernel code has

216
00:10:20.399 --> 00:10:25.519
<v Speaker 2>complete access to the system, while user mode code is well,

217
00:10:25.519 --> 00:10:26.600
<v Speaker 2>it's restricted, right.

218
00:10:27.000 --> 00:10:30.200
<v Speaker 1>The kernel is like the ultimate authority, calling all the shots.

219
00:10:30.960 --> 00:10:34.759
<v Speaker 1>So how do these two spaces interact? How does user

220
00:10:34.799 --> 00:10:37.000
<v Speaker 1>mode code request services.

221
00:10:36.519 --> 00:10:40.039
<v Speaker 2>From the kernel through system calls? User mode code uses

222
00:10:40.080 --> 00:10:44.399
<v Speaker 2>specific mechanisms like interrupts or special instructions depending on the architecture.

223
00:10:44.519 --> 00:10:46.840
<v Speaker 2>It's like knocking on the kernel's door and asking.

224
00:10:46.559 --> 00:10:49.200
<v Speaker 1>For something, and the kernel has a system for handling

225
00:10:49.240 --> 00:10:52.480
<v Speaker 1>these requests, making sure they're legitimate and granting access to

226
00:10:52.519 --> 00:10:53.759
<v Speaker 1>the appropriate resources.

227
00:10:54.120 --> 00:10:57.720
<v Speaker 2>Exactly. The kernel has tables that map system call numbers

228
00:10:57.720 --> 00:11:00.639
<v Speaker 2>to the actual functions that handle those requests. And guess what,

229
00:11:00.679 --> 00:11:03.080
<v Speaker 2>if malware wants to get sneaky, it might try to

230
00:11:03.120 --> 00:11:04.120
<v Speaker 2>manipulate those tables.

231
00:11:04.120 --> 00:11:06.519
<v Speaker 1>Oh no, So it's like setting up a fake door

232
00:11:06.559 --> 00:11:08.840
<v Speaker 1>that looks like the real one, tricking the user mode

233
00:11:08.840 --> 00:11:10.799
<v Speaker 1>code into making requests to the wrong place.

234
00:11:11.000 --> 00:11:14.360
<v Speaker 2>Exactly. It's a common technique used by rootkits, those stealthy

235
00:11:14.399 --> 00:11:17.080
<v Speaker 2>types of malware that try to burrow deep into the system.

236
00:11:17.159 --> 00:11:20.120
<v Speaker 1>This is getting scary. It's like a constant battle between

237
00:11:20.159 --> 00:11:22.879
<v Speaker 1>those trying to protect the system and those trying to

238
00:11:22.919 --> 00:11:26.720
<v Speaker 1>exploit it. What else is crucial for understanding the kernel?

239
00:11:27.120 --> 00:11:30.799
<v Speaker 2>IRQL or interrupt request level is a pretty important concept,

240
00:11:30.840 --> 00:11:32.799
<v Speaker 2>even though it can be a bit abstract. It's a

241
00:11:32.799 --> 00:11:36.679
<v Speaker 2>way of managing the system's interruptability, determining what code can

242
00:11:36.759 --> 00:11:38.720
<v Speaker 2>run and how interrupts are handled.

243
00:11:38.799 --> 00:11:40.960
<v Speaker 1>So it's like a priority system. Some code gets to

244
00:11:41.039 --> 00:11:41.960
<v Speaker 1>jump to the funnel line.

245
00:11:42.000 --> 00:11:44.399
<v Speaker 2>You got it. There are two key levels to be

246
00:11:44.440 --> 00:11:49.200
<v Speaker 2>aware of, passive level and dispatch level. Most user mode

247
00:11:49.240 --> 00:11:51.679
<v Speaker 2>code and much of the kernel runs at passive level,

248
00:11:51.720 --> 00:11:55.480
<v Speaker 2>which is the normal interruptible state. But dispatch level that's

249
00:11:55.519 --> 00:11:58.960
<v Speaker 2>for critical code that can't be interrupted like thread scheduling.

250
00:11:58.759 --> 00:12:00.879
<v Speaker 1>Makes sense, can have the system crashing just because some

251
00:12:01.000 --> 00:12:03.720
<v Speaker 1>random process needs attention. What else is there to know

252
00:12:03.759 --> 00:12:04.759
<v Speaker 1>about the kernel? Well?

253
00:12:04.799 --> 00:12:07.639
<v Speaker 2>You also provided sources on linked lists and how the

254
00:12:07.679 --> 00:12:11.399
<v Speaker 2>Windows kernel uses them extensively for managing things like processes, threads,

255
00:12:11.600 --> 00:12:12.639
<v Speaker 2>and loaded modules.

256
00:12:12.960 --> 00:12:15.679
<v Speaker 1>Linked lists, right, those are those data structures where each

257
00:12:15.679 --> 00:12:18.080
<v Speaker 1>element points to the next one. But what makes them

258
00:12:18.120 --> 00:12:20.080
<v Speaker 1>so special in the context of the kernel.

259
00:12:20.240 --> 00:12:23.080
<v Speaker 2>The kernel uses them everywhere to keep track of all

260
00:12:23.120 --> 00:12:26.720
<v Speaker 2>sorts of things. Understanding how they're used and manipulated is

261
00:12:26.919 --> 00:12:31.080
<v Speaker 2>essential for reversing kernel level code. They're like the organizational

262
00:12:31.120 --> 00:12:32.120
<v Speaker 2>structure of the kernel.

263
00:12:32.240 --> 00:12:34.440
<v Speaker 1>So if you want to understand how the kernel keeps

264
00:12:34.480 --> 00:12:37.519
<v Speaker 1>track of everything, you need to understand how it uses linked.

265
00:12:37.200 --> 00:12:41.720
<v Speaker 2>Lists precisely, and there are specific functions for manipulating linked

266
00:12:41.720 --> 00:12:46.320
<v Speaker 2>lists like insert headlist and remove entry list. Now, imagine

267
00:12:46.360 --> 00:12:48.159
<v Speaker 2>malware that wants to hide itself.

268
00:12:48.159 --> 00:12:51.120
<v Speaker 1>It could like remove its entry from a linked list right,

269
00:12:51.240 --> 00:12:53.279
<v Speaker 1>making it invisible to security tool.

270
00:12:53.159 --> 00:12:55.840
<v Speaker 2>You got it. Or it could try to insert itself

271
00:12:55.879 --> 00:12:58.879
<v Speaker 2>into a critical list to gain control of a system process.

272
00:12:59.399 --> 00:13:02.399
<v Speaker 2>Even something as seemingly basic as a link list can

273
00:13:02.480 --> 00:13:04.399
<v Speaker 2>be exploited for malicious purposes.

274
00:13:04.519 --> 00:13:07.720
<v Speaker 1>It's amazing how something so fundamental can be twisted for evil.

275
00:13:08.000 --> 00:13:10.759
<v Speaker 1>This is mind blowing. Now. You mentioned earlier that the

276
00:13:10.840 --> 00:13:14.080
<v Speaker 1>kernel doesn't always operate in a neat sequential manner.

277
00:13:13.919 --> 00:13:17.200
<v Speaker 2>Right, that's the whole idea of asynchronous execution. Things can

278
00:13:17.240 --> 00:13:20.240
<v Speaker 2>happen out of order in parallel. You have things like

279
00:13:20.360 --> 00:13:22.519
<v Speaker 2>dpcs and work items running code in the.

280
00:13:22.519 --> 00:13:26.000
<v Speaker 1>Background, So it's like having multiple tasks running at the

281
00:13:26.000 --> 00:13:28.000
<v Speaker 1>same time behind the scenes exactly.

282
00:13:28.440 --> 00:13:30.720
<v Speaker 2>And this adds a whole other layer of complexity to

283
00:13:30.799 --> 00:13:34.360
<v Speaker 2>reverse engineering because you can't just follow the code linearly anymore.

284
00:13:34.720 --> 00:13:37.559
<v Speaker 2>You need to be aware of these background tasks and

285
00:13:37.600 --> 00:13:39.360
<v Speaker 2>how they might be interacting with the system.

286
00:13:39.639 --> 00:13:42.200
<v Speaker 1>Okay, this is getting pretty complex. But I think I'm

287
00:13:42.240 --> 00:13:45.799
<v Speaker 1>starting to see why understanding the kernel is so crucial

288
00:13:46.320 --> 00:13:49.240
<v Speaker 1>for advance reverse engineering. Now, I know you've brought some

289
00:13:49.279 --> 00:13:52.000
<v Speaker 1>real world examples of rootkit code to show us how

290
00:13:52.000 --> 00:13:54.320
<v Speaker 1>this all plays out, and practice.

291
00:13:53.720 --> 00:13:56.960
<v Speaker 2>You got it. We've got sample F and sample I,

292
00:13:57.519 --> 00:13:59.960
<v Speaker 2>both of which interact to the kernels in pretty interesting ways.

293
00:14:00.360 --> 00:14:02.879
<v Speaker 2>Let's start with Sample F. What do you notice about it?

294
00:14:03.159 --> 00:14:06.039
<v Speaker 1>Hmmm, well, it seems to be modifying the system service

295
00:14:06.039 --> 00:14:10.159
<v Speaker 1>descripture table. Isn't that the table that maps system calls

296
00:14:10.200 --> 00:14:12.039
<v Speaker 1>to their handlers bingo?

297
00:14:12.600 --> 00:14:16.039
<v Speaker 2>It's redirecting system calls to its own malicious code.

298
00:14:16.120 --> 00:14:19.759
<v Speaker 1>So it's basically taking control of those system calls, intercepting

299
00:14:19.799 --> 00:14:22.039
<v Speaker 1>them before they can reach their intended destination.

300
00:14:22.279 --> 00:14:25.039
<v Speaker 2>And to make matters worse, it does all this while

301
00:14:25.120 --> 00:14:28.840
<v Speaker 2>running at a high IRQL, making it difficult to interrupt.

302
00:14:29.080 --> 00:14:32.000
<v Speaker 2>It's like a thief disabling the alarm system before breaking in.

303
00:14:32.480 --> 00:14:36.039
<v Speaker 1>It's trying to be as stealthy and as disruptive as possible.

304
00:14:36.080 --> 00:14:38.320
<v Speaker 1>This is like something out of a spy movie. What

305
00:14:38.399 --> 00:14:40.759
<v Speaker 1>about Sample I? Does it use similar techniques?

306
00:14:40.840 --> 00:14:44.080
<v Speaker 2>Sable A is even more sophisticated. It not only hooks

307
00:14:44.120 --> 00:14:47.440
<v Speaker 2>system calls, but It also manipulates linked lists to hide.

308
00:14:47.240 --> 00:14:50.600
<v Speaker 1>Itself, so it's covering its tracks, erasing any evidence of

309
00:14:50.639 --> 00:14:52.080
<v Speaker 1>its presence exactly.

310
00:14:52.120 --> 00:14:54.480
<v Speaker 2>It's like a masterclass in stealth and evasion.

311
00:14:54.960 --> 00:14:58.200
<v Speaker 1>This has been an incredible deep dive. We've explored by

312
00:14:58.279 --> 00:15:02.039
<v Speaker 1>eighty six, by sixty four, arm architectures and even the

313
00:15:02.039 --> 00:15:04.840
<v Speaker 1>Windows kernel. I feel like I've learned so much, but

314
00:15:04.919 --> 00:15:07.240
<v Speaker 1>it's clear there's still so much more to discover.

315
00:15:07.559 --> 00:15:09.840
<v Speaker 2>You've done a great job grapping these concepts. It's a

316
00:15:09.879 --> 00:15:12.279
<v Speaker 2>complex field, but you're clearly a natural at this.

317
00:15:12.720 --> 00:15:16.240
<v Speaker 1>Thanks. I'm definitely feeling more confident about tackling these challenges.

318
00:15:16.960 --> 00:15:19.120
<v Speaker 1>What would you say are the most important takeaways for

319
00:15:19.200 --> 00:15:21.240
<v Speaker 1>someone just starting out in reverse engineering?

320
00:15:21.600 --> 00:15:25.799
<v Speaker 2>A solid understanding of those fundamentals is crucial. Computer architecture,

321
00:15:25.879 --> 00:15:29.559
<v Speaker 2>assembly language, operating systems, and don't be afraid to get

322
00:15:29.600 --> 00:15:33.600
<v Speaker 2>your hands dirty, analyze real world code, experiment and learn

323
00:15:33.600 --> 00:15:34.440
<v Speaker 2>from your mistakes.

324
00:15:34.639 --> 00:15:37.799
<v Speaker 1>That's great advice. And as we've seen, reverse engineering isn't

325
00:15:37.840 --> 00:15:42.320
<v Speaker 1>just a theoretical exercise. It is real world applications in cybersecurity,

326
00:15:42.440 --> 00:15:44.960
<v Speaker 1>software development, and digital forensics.

327
00:15:45.039 --> 00:15:48.639
<v Speaker 2>Absolutely, and as technology continues to evolve, the role of

328
00:15:48.679 --> 00:15:50.840
<v Speaker 2>reverse engineering will only become more critical.

329
00:15:51.159 --> 00:15:53.679
<v Speaker 1>This has been an amazing journey, but I think we

330
00:15:53.759 --> 00:15:55.720
<v Speaker 1>need to take a break here. Ready to move on

331
00:15:55.799 --> 00:15:58.120
<v Speaker 1>to part two where we delve deeple into the world

332
00:15:58.240 --> 00:15:59.159
<v Speaker 1>of oppuscation.

333
00:15:59.440 --> 00:16:01.600
<v Speaker 2>Absolutely Part two is going to be a wild ride.

334
00:16:02.240 --> 00:16:04.679
<v Speaker 2>Welcome back. We've laid a pretty solid foundation in this

335
00:16:05.440 --> 00:16:08.559
<v Speaker 2>world of reverse engineering. Now let's dive into a fascinating

336
00:16:08.600 --> 00:16:11.240
<v Speaker 2>aspect of this field. It's called obfuscation.

337
00:16:11.679 --> 00:16:16.360
<v Speaker 1>Obfuscation, the word itself sounds like intentionally confusing. Is that

338
00:16:16.440 --> 00:16:18.759
<v Speaker 1>the whole point to make code difficult to understand?

339
00:16:19.080 --> 00:16:23.120
<v Speaker 2>Precisely, it's the art of hiding the true intentive code

340
00:16:23.440 --> 00:16:27.720
<v Speaker 2>while still preserving its functionality. Like think of it as

341
00:16:27.759 --> 00:16:31.200
<v Speaker 2>a magician's sleight of hand. You know, the trick still works,

342
00:16:31.600 --> 00:16:33.960
<v Speaker 2>but the method is completely concealed.

343
00:16:33.759 --> 00:16:36.720
<v Speaker 1>So it's like speaking in code, making sure only those

344
00:16:36.759 --> 00:16:39.000
<v Speaker 1>in the know can understand the message.

345
00:16:39.519 --> 00:16:41.799
<v Speaker 2>That's a great analogy. Just like there are tons of

346
00:16:41.799 --> 00:16:45.559
<v Speaker 2>ways to encode messages, there are different techniques for obfuscating code.

347
00:16:45.720 --> 00:16:48.480
<v Speaker 2>One common one is manipulating the control flow.

348
00:16:48.720 --> 00:16:51.919
<v Speaker 1>Control flow right, that's how the program executes instructions like

349
00:16:52.320 --> 00:16:55.440
<v Speaker 1>it's a roadmap, guiding the execution from one point to another.

350
00:16:55.559 --> 00:16:59.720
<v Speaker 2>You got it. Obfuscators can introduce like unnecessary jumps or

351
00:17:00.200 --> 00:17:04.519
<v Speaker 2>convoluted loops. They might even like interleave unrelated code segments

352
00:17:04.519 --> 00:17:05.960
<v Speaker 2>to make it harder to follow the logic.

353
00:17:06.119 --> 00:17:08.240
<v Speaker 1>So it's like taking a straightforward map and turning it

354
00:17:08.279 --> 00:17:10.680
<v Speaker 1>into a tangled web of paths exactly.

355
00:17:11.160 --> 00:17:14.119
<v Speaker 2>And this can be really effective against automated analysis tools,

356
00:17:14.279 --> 00:17:17.039
<v Speaker 2>you know, those that rely on predictable patterns. It throws

357
00:17:17.039 --> 00:17:18.240
<v Speaker 2>a wrench in the whole system.

358
00:17:18.359 --> 00:17:20.799
<v Speaker 1>So it's a way to outsmart the machines by making

359
00:17:20.880 --> 00:17:24.559
<v Speaker 1>the code look less like well machine generated and more

360
00:17:24.599 --> 00:17:27.839
<v Speaker 1>like something a human wrote, with all its quirks and complexities.

361
00:17:28.119 --> 00:17:30.839
<v Speaker 2>You're catching on quickly. It's like an ongoing arms race,

362
00:17:31.000 --> 00:17:33.000
<v Speaker 2>you know, between those who want to protect their code

363
00:17:33.240 --> 00:17:36.119
<v Speaker 2>and those who are trying to understand it. Speaking of which,

364
00:17:36.359 --> 00:17:39.240
<v Speaker 2>our sources mentioned something called opaque predicates.

365
00:17:39.640 --> 00:17:44.200
<v Speaker 1>Opaque predicates, Hmmm, those sound intriguing. What are those all about?

366
00:17:44.440 --> 00:17:47.559
<v Speaker 2>Think of them like riddles embedded in the code, conditions

367
00:17:47.559 --> 00:17:50.480
<v Speaker 2>that are deliberately designed to be super hard to analyze,

368
00:17:50.799 --> 00:17:55.119
<v Speaker 2>often involving like complex calculations or even external factors that

369
00:17:55.160 --> 00:17:56.920
<v Speaker 2>are unknown at compile time.

370
00:17:57.200 --> 00:17:59.720
<v Speaker 1>So it's like creating a puzzle within a puzzle, make

371
00:17:59.759 --> 00:18:02.559
<v Speaker 1>it's so difficult to determine which pass the code will take,

372
00:18:02.640 --> 00:18:04.240
<v Speaker 1>the reverse engineer just gives.

373
00:18:04.079 --> 00:18:06.799
<v Speaker 2>Up, Yeah, that's the idea. And these techniques can be

374
00:18:06.799 --> 00:18:11.720
<v Speaker 2>pretty sophisticated, ranging from like simple tricks to super elaborate schemes.

375
00:18:11.880 --> 00:18:14.319
<v Speaker 1>It's like the difference between hiding something in plain sight

376
00:18:14.480 --> 00:18:17.519
<v Speaker 1>and creating an elaborate escape room. Sound like obfuscation is

377
00:18:17.559 --> 00:18:19.119
<v Speaker 1>a whole field of study in itself.

378
00:18:19.480 --> 00:18:21.880
<v Speaker 2>It definitely is, and it's tied to other areas like

379
00:18:21.960 --> 00:18:27.799
<v Speaker 2>software protection, anti tampering, and digital rights management. Anything focused

380
00:18:27.839 --> 00:18:29.680
<v Speaker 2>on controlling how software.

381
00:18:29.319 --> 00:18:32.680
<v Speaker 1>Is used, really right, because in those cases you're trying

382
00:18:32.680 --> 00:18:36.039
<v Speaker 1>to protect something valuable, whether it's you know, intellectual property

383
00:18:36.279 --> 00:18:39.559
<v Speaker 1>data or the integrity of a system. But if someone's

384
00:18:39.640 --> 00:18:42.799
<v Speaker 1>really determined to understand the code, are there ways to

385
00:18:42.880 --> 00:18:44.079
<v Speaker 1>reverse these techniques?

386
00:18:44.279 --> 00:18:49.079
<v Speaker 2>Absolutely? De Abfuscation is like the countermeasure to obfuscation. It's

387
00:18:49.119 --> 00:18:50.880
<v Speaker 2>a fascinating field in its own right.

388
00:18:51.000 --> 00:18:54.720
<v Speaker 1>So it's like having a codebreaker, someone who specializes in

389
00:18:54.759 --> 00:18:57.079
<v Speaker 1>deciphering those secret messages exactly.

390
00:18:57.160 --> 00:19:00.599
<v Speaker 2>And just like there are different encoding techniques, the multiple

391
00:19:00.599 --> 00:19:04.559
<v Speaker 2>approaches to deobfuscation, each with its own strengths and weaknesses.

392
00:19:05.240 --> 00:19:08.400
<v Speaker 2>Our sources mentioned something called pattern based deobfuscation.

393
00:19:08.839 --> 00:19:12.200
<v Speaker 1>Pattern based that almost sounds well simple.

394
00:19:12.480 --> 00:19:16.839
<v Speaker 2>It's essentially about identifying common patterns in obfuscated code and

395
00:19:16.920 --> 00:19:19.880
<v Speaker 2>developing rules to transform it back into a more readable form.

396
00:19:20.000 --> 00:19:22.160
<v Speaker 1>So it's like having a cheat sheet for those obfuscation

397
00:19:22.200 --> 00:19:23.160
<v Speaker 1>tricks you got.

398
00:19:23.200 --> 00:19:27.000
<v Speaker 2>It works pretty well against simple obfuscators, you know, those

399
00:19:27.039 --> 00:19:29.720
<v Speaker 2>relying on a limited set of patterns. But what happens

400
00:19:29.720 --> 00:19:31.880
<v Speaker 2>when you encounter something more complex.

401
00:19:31.920 --> 00:19:35.400
<v Speaker 1>Right, something using a huge, ever changing set of tricks.

402
00:19:35.519 --> 00:19:38.039
<v Speaker 1>In that case, you'd need a more adaptable.

403
00:19:37.480 --> 00:19:39.720
<v Speaker 2>Approach, Right, that's where program analysis comes in.

404
00:19:39.759 --> 00:19:43.359
<v Speaker 1>A play program analysis Okay, that sounds a bit more intimidating.

405
00:19:43.559 --> 00:19:45.880
<v Speaker 2>Well, it's a broad field using a bunch of techniques

406
00:19:45.920 --> 00:19:50.599
<v Speaker 2>to understand how software behaves in deobfuscation. This might involve

407
00:19:50.640 --> 00:19:55.759
<v Speaker 2>things like data flow analysis, symbolic execution, or abstract interpretation.

408
00:19:56.000 --> 00:19:59.839
<v Speaker 1>So we're going deeper beyond just the surface level exactly.

409
00:20:00.119 --> 00:20:04.839
<v Speaker 2>Stand the code's intent, motivations, and vulnerabilities. Data Flow analysis,

410
00:20:04.839 --> 00:20:08.799
<v Speaker 2>for instance, tracks how data moves through the program. Symbolic

411
00:20:08.880 --> 00:20:12.920
<v Speaker 2>execution explores all possible paths without even running the code,

412
00:20:13.359 --> 00:20:18.039
<v Speaker 2>and abstract interpretation. Well, it simplifies the code's behavior without

413
00:20:18.079 --> 00:20:19.480
<v Speaker 2>losing the essential information.

414
00:20:19.759 --> 00:20:21.920
<v Speaker 1>Wow, it's like we're trying to see through the fog

415
00:20:22.000 --> 00:20:24.599
<v Speaker 1>and uncover the true meaning of the code exactly.

416
00:20:24.680 --> 00:20:28.640
<v Speaker 2>These techniques are really powerful when applied to deopfuscation. But

417
00:20:28.720 --> 00:20:31.799
<v Speaker 2>to use these techniques we need the right tools, right,

418
00:20:31.920 --> 00:20:32.680
<v Speaker 2>that's a good point.

419
00:20:33.519 --> 00:20:36.400
<v Speaker 1>What are some of the essential tools for well reverse

420
00:20:36.440 --> 00:20:39.359
<v Speaker 1>engineering in general and specifically for deopfuscation?

421
00:20:39.559 --> 00:20:41.799
<v Speaker 2>Ah, the tools of the trade. One of the most

422
00:20:41.839 --> 00:20:45.799
<v Speaker 2>well known is IDA pro, the interactive disassembler IDA pro.

423
00:20:45.960 --> 00:20:48.920
<v Speaker 1>That's like the gold standard for reverse engineers, isn't it.

424
00:20:49.000 --> 00:20:51.519
<v Speaker 2>You could say that it's a powerful disassembler and debugger

425
00:20:51.559 --> 00:20:54.799
<v Speaker 2>with a ton of features and plugins, really versatile.

426
00:20:54.480 --> 00:20:56.839
<v Speaker 1>So it's the go to for professionals. Are there any

427
00:20:56.920 --> 00:20:59.759
<v Speaker 1>like open source alternatives for those of us who don't

428
00:20:59.759 --> 00:21:02.319
<v Speaker 1>have access to those fancy, expensive tools.

429
00:21:02.559 --> 00:21:06.880
<v Speaker 2>Definitely. Giedra, developed by the NSA is a fantastic option.

430
00:21:07.000 --> 00:21:09.160
<v Speaker 2>It's completely open source and it's gained a ton of

431
00:21:09.200 --> 00:21:10.880
<v Speaker 2>popularity recently the NSA.

432
00:21:11.319 --> 00:21:13.519
<v Speaker 1>Wow, that's quite the endorsement it is.

433
00:21:13.640 --> 00:21:16.400
<v Speaker 2>Gedra is a really powerful tool with a wide range

434
00:21:16.440 --> 00:21:19.039
<v Speaker 2>of features, making it a strong contender in the world

435
00:21:19.079 --> 00:21:23.440
<v Speaker 2>of reverse engineering. But what about more specialized tools, specifically

436
00:21:23.440 --> 00:21:24.319
<v Speaker 2>for deobfuscation.

437
00:21:24.680 --> 00:21:28.039
<v Speaker 1>Yeah, are there tools designed to tackle those really complex techniques?

438
00:21:28.240 --> 00:21:32.359
<v Speaker 2>Oh? Absolutely. One that stands out is Vickstripper. It's a

439
00:21:32.400 --> 00:21:37.480
<v Speaker 2>framework for dynamic analysis and deobfuscation and it uses get this,

440
00:21:37.599 --> 00:21:40.400
<v Speaker 2>the QEMU emulator QEMU.

441
00:21:40.759 --> 00:21:43.359
<v Speaker 1>Wait, isn't that usually used for running different operating systems?

442
00:21:43.400 --> 00:21:45.319
<v Speaker 1>What's it doing in a deobfuscation tool?

443
00:21:45.440 --> 00:21:48.599
<v Speaker 2>That's what's so cool about it. Vick Stripper actually runs

444
00:21:48.640 --> 00:21:53.039
<v Speaker 2>the code inside a controlled environment using q EMU, so

445
00:21:53.119 --> 00:21:56.079
<v Speaker 2>it can observe the code's behavior and gather info that

446
00:21:56.119 --> 00:21:58.400
<v Speaker 2>can be used to well deobfuscate it.

447
00:21:58.400 --> 00:22:01.319
<v Speaker 1>It's like a detective observing a susack in a controlled environment,

448
00:22:01.759 --> 00:22:04.200
<v Speaker 1>trying to understand their motives and their pattern exactly.

449
00:22:04.440 --> 00:22:06.960
<v Speaker 2>And because it uses QEMU, vick Stripper can handle a

450
00:22:07.000 --> 00:22:09.279
<v Speaker 2>ton of different architectures and operating systems.

451
00:22:09.400 --> 00:22:12.759
<v Speaker 1>That's impressive. So we've got idea pro and gage reffort

452
00:22:12.799 --> 00:22:15.519
<v Speaker 1>general reverse engineering, and then tools like viek Stripper for

453
00:22:15.559 --> 00:22:19.000
<v Speaker 1>more specialized tasks. Anything else we should know about these tools,

454
00:22:19.119 --> 00:22:19.559
<v Speaker 1>just that the.

455
00:22:19.480 --> 00:22:22.200
<v Speaker 2>World of reverse engineering tools is vast, you know, it's

456
00:22:22.240 --> 00:22:25.000
<v Speaker 2>constantly evolving. There are countless tools out there, each with

457
00:22:25.079 --> 00:22:28.440
<v Speaker 2>its own strengths and weaknesses, and honestly, the more you explore,

458
00:22:28.480 --> 00:22:29.400
<v Speaker 2>the more you'll discover.

459
00:22:29.759 --> 00:22:33.680
<v Speaker 1>It's like having a specialized toolkit for every challenge. But

460
00:22:33.799 --> 00:22:37.559
<v Speaker 1>tools are only part of the equation, right. Reverse engineering

461
00:22:37.599 --> 00:22:41.160
<v Speaker 1>requires a certain mindset, a way of thinking that goes

462
00:22:41.240 --> 00:22:43.640
<v Speaker 1>beyond knowing how to use the tools.

463
00:22:43.799 --> 00:22:49.359
<v Speaker 2>Absolutely, it's about curiosity, persistence, a willingness to really explore.

464
00:22:49.720 --> 00:22:52.920
<v Speaker 2>It's about embracing the challenge and finding clarity and all

465
00:22:52.960 --> 00:22:53.759
<v Speaker 2>that complexity.

466
00:22:53.839 --> 00:22:56.640
<v Speaker 1>It's like being a detective, right, piecing together clues, making

467
00:22:56.720 --> 00:22:57.480
<v Speaker 1>those connections.

468
00:22:57.480 --> 00:23:00.440
<v Speaker 2>You got it. It's about being comfortable with uncertainty, knowing

469
00:23:00.480 --> 00:23:04.240
<v Speaker 2>that you're often working with incomplete information. It's a journey,

470
00:23:04.279 --> 00:23:06.079
<v Speaker 2>a process of learning and adapting.

471
00:23:06.319 --> 00:23:08.160
<v Speaker 1>It's an art as much as it is a science.

472
00:23:08.240 --> 00:23:10.119
<v Speaker 2>I would agree with that you need technical skill, but

473
00:23:10.160 --> 00:23:11.759
<v Speaker 2>also creativity and intuition.

474
00:23:12.240 --> 00:23:14.839
<v Speaker 1>We've covered a lot of ground today in this deep

475
00:23:14.920 --> 00:23:19.680
<v Speaker 1>dive into obfuscation and deobfuscation. It's a complex field, that's

476
00:23:19.680 --> 00:23:21.720
<v Speaker 1>for sure. Ready to move on to part three.

477
00:23:21.759 --> 00:23:24.000
<v Speaker 2>Let's do it. I'm excited to see what real world

478
00:23:24.079 --> 00:23:25.920
<v Speaker 2>applications we uncover in Part three.

479
00:23:26.119 --> 00:23:28.680
<v Speaker 1>Welcome back to the deep dive. We've been on quite

480
00:23:28.759 --> 00:23:32.000
<v Speaker 1>a journey, haven't we. Exploring all those intricate details of

481
00:23:32.240 --> 00:23:36.319
<v Speaker 1>by eighty six, By sixty four and arm, then diving

482
00:23:36.400 --> 00:23:41.359
<v Speaker 1>deep into the Windows kernel, even navigating that murky world

483
00:23:41.440 --> 00:23:44.200
<v Speaker 1>of obfuscation and de obfuscation.

484
00:23:44.519 --> 00:23:47.119
<v Speaker 2>It's been quite the adventure. But now it's time we

485
00:23:47.160 --> 00:23:47.920
<v Speaker 2>shift gears a bit.

486
00:23:48.599 --> 00:23:50.799
<v Speaker 1>Right, Let's talk about the practical side of things, Like

487
00:23:50.799 --> 00:23:52.960
<v Speaker 1>what can you actually do with all this knowledge? What

488
00:23:53.039 --> 00:23:55.960
<v Speaker 1>are some real world applications of reverse engineering?

489
00:23:56.319 --> 00:23:59.519
<v Speaker 2>Well, reverse engineering is a surprisingly versatile skill. You know,

490
00:23:59.599 --> 00:24:02.079
<v Speaker 2>it pops up in all sorts of fields. But since

491
00:24:02.119 --> 00:24:05.599
<v Speaker 2>your source is focused so heavily on cybersecurity.

492
00:24:04.880 --> 00:24:07.039
<v Speaker 1>Let's start there. I know a lot of people associate

493
00:24:07.079 --> 00:24:10.359
<v Speaker 1>reverse engineering with like malware analysis. Is that one of

494
00:24:10.359 --> 00:24:11.279
<v Speaker 1>the main applications.

495
00:24:11.319 --> 00:24:14.200
<v Speaker 2>Absolutely When a new piece of malware shows up, you know,

496
00:24:14.240 --> 00:24:16.920
<v Speaker 2>security researchers often reverse engineering to figure out what it

497
00:24:16.920 --> 00:24:18.480
<v Speaker 2>does and how to disarm it.

498
00:24:18.680 --> 00:24:20.960
<v Speaker 1>So it's like taking a part of suspicious device right

499
00:24:20.960 --> 00:24:23.440
<v Speaker 1>trying to figure out how it works, what it's capable of.

500
00:24:23.880 --> 00:24:27.480
<v Speaker 2>Exactly. By dissecting the code, they can identify its vulnerabilities.

501
00:24:27.920 --> 00:24:31.799
<v Speaker 2>Develop those signatures for antivirus software, even create tools to

502
00:24:31.880 --> 00:24:33.440
<v Speaker 2>remove it from infected systems.

503
00:24:33.559 --> 00:24:36.839
<v Speaker 1>It's like turning the enemy's weapon against them. That sounds

504
00:24:36.880 --> 00:24:39.200
<v Speaker 1>like a crucial part of, you know, the ongoing battle

505
00:24:39.200 --> 00:24:44.240
<v Speaker 1>against malware. What other cybersecurity applications can you think of?

506
00:24:45.039 --> 00:24:49.079
<v Speaker 2>Vulnerability research is another area where reverse engineering really shines.

507
00:24:49.880 --> 00:24:54.240
<v Speaker 2>Researchers often reverse engineer software to uncover security flaws, you know,

508
00:24:54.400 --> 00:24:56.720
<v Speaker 2>those weaknesses that attackers could exploit.

509
00:24:56.960 --> 00:24:59.960
<v Speaker 1>So they're like proactively looking for holes in the fence

510
00:25:00.160 --> 00:25:01.720
<v Speaker 1>before someone can sneak through, right.

511
00:25:01.680 --> 00:25:05.279
<v Speaker 2>Precisely, by understanding how software works at that low level,

512
00:25:05.640 --> 00:25:09.200
<v Speaker 2>they can identify potential vulnerabilities and report them to the developers.

513
00:25:09.480 --> 00:25:11.559
<v Speaker 1>It's always better to prevent a crime than to deal

514
00:25:11.640 --> 00:25:14.680
<v Speaker 1>with the aftermath. Now, what about digital forensics. I feel

515
00:25:14.680 --> 00:25:17.240
<v Speaker 1>like that's an area where reverse engineering could be really useful.

516
00:25:17.400 --> 00:25:21.519
<v Speaker 2>You're absolutely right. Digital forensics, you know, investigating those computer

517
00:25:21.599 --> 00:25:26.240
<v Speaker 2>related crimes often relies on reverse engineering. Investigators might use

518
00:25:26.240 --> 00:25:30.079
<v Speaker 2>it to recover deleted files, analyze network traffic, or trace

519
00:25:30.119 --> 00:25:31.319
<v Speaker 2>the origins of an attack.

520
00:25:31.440 --> 00:25:36.839
<v Speaker 1>It's like those digital detectives, right, piecing together clues, reconstructing events.

521
00:25:36.440 --> 00:25:40.160
<v Speaker 2>Exactly and Honestly, these are just a few of the

522
00:25:40.200 --> 00:25:45.079
<v Speaker 2>many applications within cybersecurity. It's a dynamic field where reverse

523
00:25:45.160 --> 00:25:49.160
<v Speaker 2>engineering is crucial for staying ahead of the curve, you know,

524
00:25:49.559 --> 00:25:52.480
<v Speaker 2>ensuring the security of our digital world. But it's not

525
00:25:52.559 --> 00:25:54.519
<v Speaker 2>limited to just cybersecurity, right.

526
00:25:54.440 --> 00:25:58.480
<v Speaker 1>Our sources hinted at other applications. You mentioned software development earlier.

527
00:25:58.680 --> 00:26:01.799
<v Speaker 1>That seems a bit counter into right, why would software

528
00:26:01.839 --> 00:26:03.519
<v Speaker 1>developers need reverse engineering?

529
00:26:03.599 --> 00:26:07.240
<v Speaker 2>Well, think about interoperability. Like imagine you're developing software that

530
00:26:07.319 --> 00:26:11.759
<v Speaker 2>needs to interact with a system from another vendor, right.

531
00:26:11.640 --> 00:26:14.680
<v Speaker 1>Like two different pieces of software talking to each other exactly.

532
00:26:15.319 --> 00:26:18.000
<v Speaker 2>Reverse Engineering their software can help you understand how their

533
00:26:18.039 --> 00:26:23.000
<v Speaker 2>APIs work, ensuring yours can communicate effectively. It's like learning

534
00:26:23.000 --> 00:26:26.599
<v Speaker 2>the language spoken by another tribe to establish trade and communication.

535
00:26:27.039 --> 00:26:30.519
<v Speaker 1>Makes sense. What other applications are there in software development?

536
00:26:30.920 --> 00:26:33.839
<v Speaker 2>Software optimization is another area where reverse engineering can be

537
00:26:33.880 --> 00:26:37.240
<v Speaker 2>really helpful by understanding how the software works. You know,

538
00:26:37.240 --> 00:26:41.720
<v Speaker 2>at a low level, developers can find bottlenecks in efficiencies.

539
00:26:41.319 --> 00:26:43.640
<v Speaker 1>So it's about getting under the hood and making sure

540
00:26:43.680 --> 00:26:48.559
<v Speaker 1>everything's running smoothly, like tuning up an engine for maximum performance.

541
00:26:48.960 --> 00:26:53.039
<v Speaker 1>Are there any other unexpected uses of reverse engineering.

542
00:26:53.359 --> 00:26:55.519
<v Speaker 2>Believe it or not, reverse engineering is actually a great

543
00:26:55.519 --> 00:26:59.880
<v Speaker 2>tool for learning. Programmers often reverse engineer existing software to

544
00:27:00.799 --> 00:27:05.319
<v Speaker 2>understand different coding techniques, architectural designs, problem solving approaches.

545
00:27:05.400 --> 00:27:09.119
<v Speaker 1>So it's like studying the blueprints of a well designed building, right,

546
00:27:09.200 --> 00:27:13.039
<v Speaker 1>try and understand the architect's vision and techniques exactly.

547
00:27:12.799 --> 00:27:15.400
<v Speaker 2>This kind of learning, learning through reverse engineering, it can

548
00:27:15.440 --> 00:27:20.920
<v Speaker 2>be incredibly beneficial for both novice and experience programmers. It

549
00:27:20.960 --> 00:27:24.119
<v Speaker 2>exposes you to different styles, approaches, best practices.

550
00:27:24.359 --> 00:27:28.200
<v Speaker 1>Wow, we've uncovered a surprising range of applications for reverse engineering.

551
00:27:28.279 --> 00:27:31.200
<v Speaker 1>It seems like it pops up everywhere. Any funal thoughts

552
00:27:31.240 --> 00:27:32.279
<v Speaker 1>before we wrap things up.

553
00:27:32.799 --> 00:27:36.480
<v Speaker 2>Reverse engineering is definitely a powerful skill, but it's crucial

554
00:27:36.519 --> 00:27:39.839
<v Speaker 2>to use it ethically and responsibly. It's a tool, right,

555
00:27:40.240 --> 00:27:42.440
<v Speaker 2>and like any tool, it can be used for good

556
00:27:42.519 --> 00:27:42.920
<v Speaker 2>or bad.

557
00:27:43.160 --> 00:27:46.720
<v Speaker 1>Knowledge is power, but with great power comes great responsibility.

558
00:27:46.960 --> 00:27:47.519
<v Speaker 2>Exactly.

559
00:27:48.079 --> 00:27:50.160
<v Speaker 1>Well, I think we've given our listener a pretty good

560
00:27:50.160 --> 00:27:54.640
<v Speaker 1>overview of this fascinating world of reverse engineering. We explored

561
00:27:54.680 --> 00:27:58.759
<v Speaker 1>the foundations, the challenges, the tools, the real world applications.

562
00:27:59.079 --> 00:28:02.519
<v Speaker 1>It's a field that's constantly evolving, always pushing those boundaries.

563
00:28:02.680 --> 00:28:04.759
<v Speaker 2>It's been a real pleasure sharing this journey with you

564
00:28:04.880 --> 00:28:07.160
<v Speaker 2>and our listeners. Yeah, and remember this is a continuous

565
00:28:07.200 --> 00:28:10.279
<v Speaker 2>learning process. The more you explore, the more you'll uncover.

566
00:28:10.559 --> 00:28:13.640
<v Speaker 1>Absolutely, to our listener, thank you so much for joining

567
00:28:13.680 --> 00:28:16.160
<v Speaker 1>us on the deep dive. We hope this exploration has

568
00:28:16.200 --> 00:28:19.039
<v Speaker 1>sparked your curiosity and inspired you to delve even deeper

569
00:28:19.039 --> 00:28:21.920
<v Speaker 1>into this world. Until next time, keep those minds curious

570
00:28:21.960 --> 00:28:23.240
<v Speaker 1>and keep those questions coming.
