1 00:00:00,300 --> 00:00:06,810 Hello, my name is typhoon and now let's switch to assembly and explore executing bash using the exec 2 00:00:06,810 --> 00:00:09,840 call and all while utilizing the execute technique. 3 00:00:09,870 --> 00:00:16,740 So what we're going to do here is we will create a section data section data and we will create the 4 00:00:16,740 --> 00:00:23,100 path here DB double slash I will explain why we did this double slash here. 5 00:00:23,190 --> 00:00:26,130 And of course we need the zero after that. 6 00:00:26,130 --> 00:00:34,110 And now we will create a section text section text uh global start is going to be starting point of 7 00:00:34,110 --> 00:00:37,530 our assembly application and label. 8 00:00:37,530 --> 00:00:51,660 And now XOR rax rax posh rax move rdx rsp and here xor rax racks. 9 00:00:52,670 --> 00:00:58,730 Plush racks move and after that we will move the RDA. 10 00:00:59,120 --> 00:01:01,340 RSP, I will explain all of these codes here. 11 00:01:01,340 --> 00:01:07,550 Don't worry, this will be actually don't this won't be actually the long code here. 12 00:01:07,550 --> 00:01:12,260 And now we just need to clean the RDX. 13 00:01:13,320 --> 00:01:16,440 And we will move the al. 14 00:01:18,300 --> 00:01:26,130 It will move this 59 to al which this is the exact we exec we syscall number. 15 00:01:26,160 --> 00:01:28,320 Let's actually comment it down here. 16 00:01:28,470 --> 00:01:31,380 Executesql number. 17 00:01:31,860 --> 00:01:34,080 And after that we will call the Cisco. 18 00:01:34,110 --> 00:01:35,010 Now that's it. 19 00:01:35,010 --> 00:01:37,230 And now let's exit our program. 20 00:01:37,950 --> 00:01:39,000 Racks. 21 00:01:39,510 --> 00:01:40,890 Racks again. 22 00:01:40,890 --> 00:01:45,630 And move our die racks. 23 00:01:46,370 --> 00:01:49,610 MOV rax 60. 24 00:01:50,150 --> 00:01:53,420 Will, this is the exit call Sysctl. 25 00:01:53,420 --> 00:01:54,680 Number exit. 26 00:01:54,740 --> 00:01:57,860 Exit syscall number and we will call the syscall again. 27 00:01:57,860 --> 00:02:06,980 So here we start storing the string double slash bin slash uh s h in the data section. 28 00:02:06,980 --> 00:02:10,370 And we start the start label for our program. 29 00:02:10,370 --> 00:02:17,030 We set the rax to zero using x or x rax and push it onto the stack. 30 00:02:17,030 --> 00:02:20,480 And this is used as a null terminator marker here. 31 00:02:20,480 --> 00:02:27,740 And we move the stack pointer to r d x uh to get our third argument. 32 00:02:27,740 --> 00:02:33,950 And we push another null value and use its address as our d I here. 33 00:02:33,950 --> 00:02:36,890 So as you can see here. 34 00:02:36,980 --> 00:02:44,180 Now after that we load the address of path uh into RSI and Ves. 35 00:02:44,180 --> 00:02:49,610 And again we are zeroing out the RDX uh, here. 36 00:02:49,610 --> 00:02:55,610 And we are setting the Al to 59, which is the syscall number for exec. 37 00:02:55,610 --> 00:02:59,570 We and we trigger the syscall using this syscall here. 38 00:02:59,570 --> 00:03:07,640 And we clear the RDA and set Rax to 60 uh which is the syscall number for exit. 39 00:03:07,640 --> 00:03:13,970 And we trigger uh exit syscall using this syscall here and continuing our exploration. 40 00:03:13,970 --> 00:03:18,350 And now we complete the task of parsing bin sh path onto the stack. 41 00:03:18,350 --> 00:03:21,380 However we are faced with a constraint here. 42 00:03:21,380 --> 00:03:24,560 So let's actually, uh, compile it here. 43 00:03:26,130 --> 00:03:26,910 Yes. 44 00:03:27,120 --> 00:03:29,610 Assemble it and then link it. 45 00:03:29,610 --> 00:03:30,510 So. 46 00:03:31,600 --> 00:03:32,260 It was. 47 00:03:32,260 --> 00:03:32,590 Yeah. 48 00:03:32,590 --> 00:03:37,630 Source shellcode LLS and xigui. 49 00:03:39,190 --> 00:03:39,400 Hey! 50 00:03:39,400 --> 00:03:40,150 Look out! 51 00:03:41,580 --> 00:03:43,680 And a Ram stack. 52 00:03:45,520 --> 00:03:46,210 All here. 53 00:03:46,210 --> 00:03:47,050 So that's it. 54 00:03:47,050 --> 00:03:48,040 Now clear here. 55 00:03:48,040 --> 00:03:48,970 Now let's, um. 56 00:03:49,690 --> 00:03:52,960 Assemble it using this, um, an ASM here. 57 00:03:52,960 --> 00:03:56,560 So in order to do that, we will just write an ASM. 58 00:03:57,860 --> 00:03:59,090 DSM here. 59 00:03:59,090 --> 00:04:09,260 After that, we will need to use the, uh, f elf64 because this will be run on 64 bit machines and, 60 00:04:09,710 --> 00:04:10,310 um. 61 00:04:10,460 --> 00:04:11,150 Exactly. 62 00:04:11,150 --> 00:04:12,980 And no, it was. 63 00:04:14,200 --> 00:04:17,020 A zig zag technique that asm. 64 00:04:17,530 --> 00:04:17,980 Um. 65 00:04:17,980 --> 00:04:23,260 Oh, here, uh, this is going to be our object file exec v dot o. 66 00:04:23,530 --> 00:04:26,410 And after that we will link it. 67 00:04:26,410 --> 00:04:34,030 So ld exec v dot o and output file is going to be which is executable file. 68 00:04:34,030 --> 00:04:35,560 It's going to be exec v. 69 00:04:35,560 --> 00:04:36,370 That's it. 70 00:04:36,370 --> 00:04:37,480 Now let's run it. 71 00:04:37,480 --> 00:04:39,400 And as you can see we got nothing. 72 00:04:40,700 --> 00:04:47,690 But actually we did need to get something from here, which is the shell call here. 73 00:04:48,930 --> 00:04:49,740 And. 74 00:04:50,410 --> 00:04:53,110 The reason we are not getting this we because we are. 75 00:04:53,320 --> 00:04:55,930 We need to turn this into the. 76 00:04:57,840 --> 00:04:58,740 Uh, bytecode. 77 00:04:58,740 --> 00:05:02,130 Firstly, and in order to do that we will use Python here. 78 00:05:02,130 --> 00:05:05,340 Again let's actually use the Python two. 79 00:05:05,340 --> 00:05:11,550 And now we will define a string with double slash bin s h. 80 00:05:11,970 --> 00:05:14,970 So this was the skeleton of our assembly program here. 81 00:05:14,970 --> 00:05:18,540 And now we will change a little bit codes from there. 82 00:05:18,540 --> 00:05:19,410 And. 83 00:05:20,480 --> 00:05:21,650 In order to do that. 84 00:05:21,830 --> 00:05:27,650 So as as you can see, we have faced with a constraint here, as I said. 85 00:05:27,650 --> 00:05:31,190 So our code structure can't accommodate null bytes. 86 00:05:31,190 --> 00:05:39,230 Therefore, we adapt our approach approach by employing the double slash here and or here or there. 87 00:05:39,230 --> 00:05:46,550 So it actually it will work on both ways, but it's actually looks pretty nicer with like that. 88 00:05:46,550 --> 00:05:49,820 Now uh, we will go to Python. 89 00:05:49,820 --> 00:05:51,650 Now let's actually. 90 00:05:52,620 --> 00:05:54,720 Yes yes yes yes. 91 00:05:54,720 --> 00:06:01,080 And now we will define a string in Python two because we will encode it and reverse it. 92 00:06:01,080 --> 00:06:03,660 You know, we will first reverse it and then encode it. 93 00:06:03,660 --> 00:06:05,880 So string here. 94 00:06:06,330 --> 00:06:08,970 Um double slash bin s h. 95 00:06:09,770 --> 00:06:11,330 And after that. 96 00:06:12,730 --> 00:06:14,050 Enter. 97 00:06:14,050 --> 00:06:16,300 Let's print a string. 98 00:06:16,570 --> 00:06:17,410 String. 99 00:06:17,410 --> 00:06:19,060 And yeah, this is our string. 100 00:06:19,060 --> 00:06:25,120 And now we will create an encoded string here, which is we will reverse it firstly minus one. 101 00:06:25,120 --> 00:06:30,070 And after that we will encode it with hex in quotes. 102 00:06:31,410 --> 00:06:32,280 That's it. 103 00:06:32,280 --> 00:06:35,610 And let's actually print the encoded. 104 00:06:36,490 --> 00:06:37,210 Encoded? 105 00:06:37,540 --> 00:06:38,290 No. 106 00:06:39,520 --> 00:06:40,750 Encoded string. 107 00:06:43,370 --> 00:06:44,330 And that's it. 108 00:06:44,330 --> 00:06:46,550 So this is our encoded string here. 109 00:06:46,550 --> 00:06:51,260 So with this here we define a string containing the desired path. 110 00:06:51,260 --> 00:06:52,640 In this case bin sh. 111 00:06:52,790 --> 00:06:57,080 And after that uh here somewhere. 112 00:06:57,080 --> 00:06:57,530 Yeah. 113 00:06:57,530 --> 00:06:59,450 And here we are. 114 00:06:59,450 --> 00:07:01,100 We are also defining encoded string. 115 00:07:01,100 --> 00:07:08,030 But now we will using this this string which has been a sage and reversing the string using the slicing. 116 00:07:08,270 --> 00:07:12,770 And after that we obtain the like reverse this here. 117 00:07:12,770 --> 00:07:14,210 Let's actually show this. 118 00:07:14,210 --> 00:07:16,220 So string. 119 00:07:17,540 --> 00:07:18,740 Minus one. 120 00:07:20,280 --> 00:07:20,580 Here. 121 00:07:20,580 --> 00:07:26,820 And as you can see, we are getting something like H, S and IB which is the reverse side of this, 122 00:07:27,390 --> 00:07:28,950 um, bush. 123 00:07:28,950 --> 00:07:32,280 And um, after that we are encoding this. 124 00:07:32,280 --> 00:07:36,810 And as a result we are getting this encoded string here. 125 00:07:36,810 --> 00:07:42,240 Now let's copy this to some text pad notepad not text. 126 00:07:43,290 --> 00:07:44,370 And that's it. 127 00:07:45,070 --> 00:07:51,220 So the sequence of operation generates the hex encoded value for our adjusted path. 128 00:07:51,220 --> 00:07:58,150 So by reversing the string and encoding it, we have achieved a workaround to ensure compatibility with 129 00:07:58,150 --> 00:07:59,560 our code structure. 130 00:08:00,070 --> 00:08:07,720 So this allows us to embed embed the path on to the stack without introducing null bytes. 131 00:08:07,720 --> 00:08:13,750 And as we progress, remember that these intricate steps embodied a sense of crafting efficient and 132 00:08:13,750 --> 00:08:15,340 functional shell code. 133 00:08:15,340 --> 00:08:22,600 And our journey continues as we build on this foundation, unraveling deeper layers of assembly, programming 134 00:08:22,600 --> 00:08:24,160 and system interaction. 135 00:08:24,160 --> 00:08:31,120 And now we will need to parse the strings into the stack here, which is this shell bytecode. 136 00:08:31,450 --> 00:08:36,910 And first we are going to pass our prepared path string into the stack. 137 00:08:36,910 --> 00:08:42,700 Since the string consists of eight bytes, we will employ the rbx register for this task and we will 138 00:08:42,700 --> 00:08:43,870 load the value. 139 00:08:44,530 --> 00:08:51,940 Uh, this value into RB, which corresponds to the SK representation of behnisch, and then push RB 140 00:08:52,120 --> 00:08:53,470 onto the stack. 141 00:08:53,470 --> 00:08:58,840 So we have uh, move something like move rb x here. 142 00:09:00,410 --> 00:09:08,780 So, uh, we will first delete here RDX, and here we will, uh, move the RDX. 143 00:09:10,150 --> 00:09:12,310 Here and now we will. 144 00:09:13,180 --> 00:09:13,840 Patchett. 145 00:09:15,240 --> 00:09:17,850 Again, as we did in previously. 146 00:09:17,850 --> 00:09:19,890 And after that. 147 00:09:21,140 --> 00:09:22,310 Now we loaded. 148 00:09:22,310 --> 00:09:23,690 Push it here. 149 00:09:26,810 --> 00:09:27,770 And. 150 00:09:31,120 --> 00:09:32,290 Yeah, sure. 151 00:09:32,290 --> 00:09:34,570 We have done with this, I think. 152 00:09:34,570 --> 00:09:40,480 Or since we are created this we might get. 153 00:09:43,000 --> 00:09:44,860 Aw, yeah. 154 00:09:45,520 --> 00:09:47,200 After that, we punched the RHB. 155 00:09:47,350 --> 00:09:49,300 Here we will move the DH. 156 00:09:49,330 --> 00:09:50,080 That's actually. 157 00:09:51,470 --> 00:09:52,700 No, we don't want this. 158 00:09:52,700 --> 00:09:54,650 So we have deleted this. 159 00:09:54,650 --> 00:09:56,630 So move the RSP. 160 00:09:58,090 --> 00:09:59,170 And. 161 00:10:02,030 --> 00:10:04,370 Let's delete this code and start it here. 162 00:10:04,370 --> 00:10:08,570 Because it's editing assembly code is actually pretty challenging thing to do. 163 00:10:08,570 --> 00:10:19,550 And uh, now we will move the RDI, RSP and push Rax again and push RTI. 164 00:10:21,410 --> 00:10:23,870 And we will move the. 165 00:10:24,760 --> 00:10:25,630 RSI. 166 00:10:26,880 --> 00:10:28,980 RSP like this. 167 00:10:28,980 --> 00:10:29,400 Yeah. 168 00:10:29,910 --> 00:10:37,830 RSP and we will add racks 59 which is a Cisco for Cisco number for our. 169 00:10:38,700 --> 00:10:39,690 Program here. 170 00:10:39,690 --> 00:10:42,840 And after that, we don't want to end this program for now. 171 00:10:42,840 --> 00:10:49,860 But here we got some errors, I think expression syntax error with the problem. 172 00:10:50,900 --> 00:10:51,470 Hmm. 173 00:10:51,650 --> 00:10:52,280 Yeah. 174 00:10:52,280 --> 00:10:59,780 Because we need also we need to tell the assembly to that this is a, uh, byte code here. 175 00:11:01,560 --> 00:11:02,520 And. 176 00:11:02,520 --> 00:11:03,810 Yeah, that's fixed. 177 00:11:03,810 --> 00:11:07,650 Now, let's, uh, assemble and link our program again. 178 00:11:08,100 --> 00:11:17,580 And as you can see this compiled successfully and LD linking here and exec we got the segmentation fault. 179 00:11:18,520 --> 00:11:19,000 Hmm'hmm. 180 00:11:21,860 --> 00:11:23,480 And I got a segmentation fault here. 181 00:11:25,330 --> 00:11:29,740 Which actually we also need to delete this data here. 182 00:11:29,740 --> 00:11:32,920 So we are not going to use any data. 183 00:11:35,260 --> 00:11:36,730 And start. 184 00:11:37,680 --> 00:11:38,580 Section? 185 00:11:38,580 --> 00:11:39,000 Yeah. 186 00:11:39,000 --> 00:11:40,050 Section. 187 00:11:41,440 --> 00:11:46,450 And also we will need to define this global section on the first line global. 188 00:11:48,680 --> 00:11:49,490 Start. 189 00:11:51,450 --> 00:11:52,710 Let's run this again. 190 00:11:56,490 --> 00:11:58,050 We've got the segmentation fault again. 191 00:12:00,510 --> 00:12:06,510 And I think I found this error here because after this call, we need to also call the syscall. 192 00:12:06,510 --> 00:12:07,350 That's it. 193 00:12:07,650 --> 00:12:09,270 Now let's. 194 00:12:10,500 --> 00:12:12,150 To compile it. 195 00:12:12,840 --> 00:12:16,680 And here we got the shell. 196 00:12:17,340 --> 00:12:19,860 Uh, which is a good thing to do. 197 00:12:19,860 --> 00:12:28,830 And as you can see here, um, we can do everything like we do in terminal here, like move LSL, a 198 00:12:28,860 --> 00:12:32,340 full MI, and so on. 199 00:12:32,460 --> 00:12:38,940 Now we will get, uh, we will convert this into a shell code, as we always do. 200 00:12:38,970 --> 00:12:46,290 Now I will get my, um, this command here because it's actually takes almost four minutes to write. 201 00:12:47,120 --> 00:12:48,680 Without any errors. 202 00:12:50,030 --> 00:12:53,390 And it should be somewhere here. 203 00:12:53,390 --> 00:12:59,270 And as I was, as I always do, I will share it with you here. 204 00:12:59,270 --> 00:12:59,720 Yeah. 205 00:13:00,320 --> 00:13:02,570 This is our objdump command. 206 00:13:02,750 --> 00:13:04,190 Let's go to here now. 207 00:13:04,970 --> 00:13:07,190 Now we will go to stack. 208 00:13:08,120 --> 00:13:11,360 We will go to see the source and shellcode. 209 00:13:11,360 --> 00:13:13,580 And here we have this exec. 210 00:13:13,580 --> 00:13:18,260 We, we will get this shellcode here and change. 211 00:13:18,260 --> 00:13:21,260 Hello to Execve. 212 00:13:21,410 --> 00:13:22,280 That's it. 213 00:13:22,550 --> 00:13:25,010 Now this is our shellcode. 214 00:13:27,850 --> 00:13:32,620 Now copy this and we will use C code to inject our shellcode. 215 00:13:32,650 --> 00:13:35,830 Now we will go back to sysinfo dot c file. 216 00:13:35,860 --> 00:13:38,620 Now let's delete this. 217 00:13:38,650 --> 00:13:40,780 Actually this is not the sysinfo. 218 00:13:41,260 --> 00:13:46,510 This is let's name it the exec shell dot c. 219 00:13:46,780 --> 00:13:51,220 So we will firstly include the uh studio age. 220 00:13:51,400 --> 00:13:55,540 And then we will also include the string here. 221 00:13:55,990 --> 00:13:56,380 Yeah. 222 00:13:56,380 --> 00:13:57,820 We will also include the string. 223 00:13:57,820 --> 00:14:00,790 And after that we will define our main. 224 00:14:00,790 --> 00:14:11,350 And then the shell code so include include stdio.h include include the. 225 00:14:13,480 --> 00:14:15,880 Include the string dot h. 226 00:14:18,280 --> 00:14:22,960 And after that we will define main here. 227 00:14:24,690 --> 00:14:25,470 Printf. 228 00:14:26,010 --> 00:14:27,330 We will, as we always do. 229 00:14:27,330 --> 00:14:29,190 We will also print the shell code length. 230 00:14:29,190 --> 00:14:31,800 So shell code length. 231 00:14:33,170 --> 00:14:34,850 And we will use Z. 232 00:14:34,850 --> 00:14:35,840 You here. 233 00:14:38,300 --> 00:14:39,320 New line. 234 00:14:40,230 --> 00:14:43,200 And we will use strlen. 235 00:14:44,840 --> 00:14:46,490 Const character. 236 00:14:47,590 --> 00:14:49,450 And we will enter our code here. 237 00:14:49,450 --> 00:14:51,070 But let's actually define our code. 238 00:14:51,070 --> 00:14:58,210 So we will define unsigned character character shellcode here. 239 00:14:58,630 --> 00:15:00,160 And that's it. 240 00:15:01,740 --> 00:15:03,810 Also we need to define as a string. 241 00:15:03,810 --> 00:15:05,430 So we will open the quotes here. 242 00:15:05,430 --> 00:15:08,850 After quotes we will close this line here. 243 00:15:08,850 --> 00:15:14,400 So const character and shell code here. 244 00:15:15,030 --> 00:15:15,870 That's it. 245 00:15:16,170 --> 00:15:21,570 Now after that we will also define this integer function here pointer function here. 246 00:15:21,570 --> 00:15:23,400 So red. 247 00:15:25,650 --> 00:15:29,310 And we will name it integer. 248 00:15:33,980 --> 00:15:34,820 And. 249 00:15:35,920 --> 00:15:37,720 Shellcode here again. 250 00:15:37,720 --> 00:15:38,620 And that's it. 251 00:15:38,620 --> 00:15:41,680 We will also call this ret. 252 00:15:41,980 --> 00:15:43,990 And that's it. 253 00:15:44,800 --> 00:15:46,150 They also defined it. 254 00:15:46,150 --> 00:15:46,630 Here. 255 00:15:47,350 --> 00:15:48,220 Now. 256 00:15:48,220 --> 00:15:48,970 Perfect. 257 00:15:49,000 --> 00:15:51,370 Now let's compile it. 258 00:15:55,530 --> 00:15:56,340 And. 259 00:15:58,080 --> 00:15:59,580 In order to compile it. 260 00:15:59,580 --> 00:16:04,650 Um, we will use the no stack protector and exec stack here. 261 00:16:04,650 --> 00:16:10,200 So gcc f no stack protector. 262 00:16:10,230 --> 00:16:11,280 Can you hear my voice? 263 00:16:11,280 --> 00:16:11,880 Sorry. 264 00:16:11,880 --> 00:16:12,510 Yeah. 265 00:16:13,650 --> 00:16:26,880 Uh, z exec stack and exec um, exit exec v, we got an error here, so let's find out. 266 00:16:30,520 --> 00:16:30,970 Wait. 267 00:16:31,090 --> 00:16:34,630 No, no, we need to compile this. 268 00:16:34,660 --> 00:16:35,260 Exactly. 269 00:16:35,260 --> 00:16:35,770 Here. 270 00:16:35,980 --> 00:16:38,440 Not the assembly program. 271 00:16:38,440 --> 00:16:38,950 Yeah. 272 00:16:39,190 --> 00:16:39,670 Let's see. 273 00:16:39,670 --> 00:16:40,480 And that's it. 274 00:16:40,480 --> 00:16:42,010 It's compiled successfully. 275 00:16:42,010 --> 00:16:43,090 And congratulations. 276 00:16:43,090 --> 00:16:45,400 Congratulations on reaching to this point. 277 00:16:45,400 --> 00:16:51,130 So you have masterfully transformed complex assembly concepts into a functional shell code. 278 00:16:51,730 --> 00:16:59,200 And now, uh, we will delve even deeper into the realm of shell code, exploring the advanced techniques 279 00:16:59,200 --> 00:17:05,920 and widening our understanding of how these powerful tools are developed and applied. 280 00:17:05,920 --> 00:17:09,520 So now let's execute this program and see what happens. 281 00:17:09,520 --> 00:17:09,790 Right. 282 00:17:09,790 --> 00:17:10,420 So. 283 00:17:11,480 --> 00:17:12,860 It was a drought. 284 00:17:12,860 --> 00:17:16,190 Yeah, we have the shell code length and. 285 00:17:16,190 --> 00:17:18,230 But we are not getting the shell here. 286 00:17:19,640 --> 00:17:23,330 So there's something wrong in our code here. 287 00:17:23,330 --> 00:17:25,850 Let's actually go back there. 288 00:17:26,460 --> 00:17:26,940 Yeah. 289 00:17:26,940 --> 00:17:28,380 We need to call this function. 290 00:17:28,380 --> 00:17:29,190 Sorry. 291 00:17:29,220 --> 00:17:33,120 Now let's recompile it again and run it. 292 00:17:33,120 --> 00:17:36,360 And as you can see here, we got the shell clear. 293 00:17:36,390 --> 00:17:37,680 Now let's run it. 294 00:17:38,310 --> 00:17:39,060 That's it. 295 00:17:39,060 --> 00:17:42,960 So LZ LZ la Amie. 296 00:17:43,320 --> 00:17:44,970 And here. 297 00:17:44,970 --> 00:17:51,000 So as we execute this program, you are essentially triggering your carefully crafted shell code. 298 00:17:51,150 --> 00:17:57,450 So the results you observe are testament on your dedication and skill in the realm of shell code development. 299 00:17:57,450 --> 00:18:01,980 So you have harnessed the power of the kernel to execute the execute with skill. 300 00:18:01,980 --> 00:18:08,610 And in doing so, you've opened the door or you opened the door to limitless possibilities. 301 00:18:08,610 --> 00:18:15,720 So your journey into the depths of assembly, shell code, and system interaction is undoubtedly a fascinating 302 00:18:15,720 --> 00:18:16,830 and rewarding one. 303 00:18:16,830 --> 00:18:23,430 As you continue, uh, holding your skills, don't hesitate to explore further and experiment with more 304 00:18:23,430 --> 00:18:29,310 intricate concepts in the ever evolving landscape of cybersecurity and low level programming. 305 00:18:29,310 --> 00:18:31,920 My name is Stephen and I'm waiting you in the next lecture.