wt2sK0gSy+BplikGTUknCw==spring 2026
I think this was a great course that really opened my eyes to the amount that malware can do. I didn't realize how complex even simple malware can be to interpret. The professor is amazing and the lectures are engaging. It is refreshing to see someone so enthusiastic about their craft; you can clearly tell he has been doing it for a very long time and loves sharing his experience about it. Also, for the project review below, please keep in mind I chose to go it alone and did not have a partner.
As for the projects, I think most of them are great.
Project 1 was very short; it took me about an hour. You just have to make some (~25) comments in a hello world binary.
Project 2 was long (~50 hours) and the status check was definitely helpful. Project 2 taught the very important concepts that were necessary for the rest of the course. I probably spent about 10ish hours messing around in Ghidra just trying to figure out how it worked. The rest of it was just commenting thousands of lines of assembly with what those instructions do. Pro tip: read the lab document thoroughly, you don’t have to comment every line!
Projects 3, 4, and 5 were great. They showed you the very basic concepts of what reverse engineers are looking for when evaluating a malware sample. The lectures also went over why these seemingly unrelated concepts were so important for reverse engineering.
Project 3 took me ~30 hours. This lab asks you to compute a basic def/use chain. I would say the documentation/expectations are a little unclear and the grading is a little wonky for at least projects 3/4. The lab document specifically says that each instruction is worth 5% of your grade and will round down the total. You can get 99 instructions correct, and 1 wrong, and you end up with a .04/.05 on that instruction. The hard part is, you have no way to check your work before it is submitted. So even though an instruction will be correctly categorized 99% of the time, it still takes 1 whole point off of your final grade for that project. Unless you are relentlessly looking for edge cases (which could very easily double the time needed for this project) you will end up with around an 85.
Project 4 took me around ~30 hours. This lab builds on the previous one, and asks you to calculate data dependence. The same grading issue occurs in this project, but additionally, the requirements become muddier. On the EdDiscussion, there was a student question about how external functions were to be dealt with that was never answered. The EdDiscussion issue was a recurring issue throughout the class, where students would post questions directly related to the expectations of the assignment, and it would not be answered by a staff member. When questions about project expectations are not answered by staff, it makes it hard to know if we are going in the right direction or not; compounded with the inability to test code/edge cases before final submission, it makes for a frustrating guessing game.
Project 5 took me ~25 hours. You are required to trace through the entire program by running all the possible branches of the malware with a fake C2 server. I thought it was an amazing project. We were able to test our code, we were able to see some command line errors/bugs the malware author HIMSELF created which was really neat. It was so rewarding to use all of our hard-won analysis to run all of the hacker's commands ourselves. Overall 9/10 project. The only thing holding it back was the internet issues with the VM inside a VM. If those could be figured out, I think it would be a 10/10 perfect project.
Project 6 took me about ~20 hours... but don't be fooled. This CAN be the most complex and time consuming project of the whole course. It asks you to compute dynamic control dependence. The instructor allows you to pick which algorithm you want to use and implement it for the final project. He recommends the "regions" approach. That approach is great if you want to truly learn the ins and outs of dynamic control dependence (and have lots of spare time), however, it is a pain to implement in PIN and will most definitely take a very long time if you are not heavily familiar with C++. For those who are currently in the class, I would advise you to think about if you actually need an online algorithm for this lab, or if you could get by with an offline algorithm. Why are online algorithms superior in the real world? Do those same assumptions apply to this project/malware sample?
In regard to the reading slides, DO NOT save them until the last minute, or you will have to grind through 30 academic papers in the last week. Do three a week (like the class asks you to) and you will be much better off. Plus they are topical to each week’s lectures, so you will get more out of them if you read them after watching and understanding the lectures.
Despite all of the grading inconsistencies I've listed above, the course offers a lot of extra credit which makes up for the lost points and is very appreciated.
I have sincerely enjoyed all of the passion and thought that was put into this course. You can tell that this course is a labor of love. This course requires a lot of time, but the instructor is up front about it, and the grading is fair. I would highly recommend this course as long as you know you have the time to put aside.
Rating: 5 / 5Difficulty: 4 / 5Workload: 20 hours / week