<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Evan Downing</title><link href="https://www.evandowning.com/" rel="alternate"/><link href="https://www.evandowning.com/feeds/all.atom.xml" rel="self"/><id>https://www.evandowning.com/</id><updated>2026-03-01T00:00:00-05:00</updated><subtitle>Cybersecurity Researcher</subtitle><entry><title>My DJ Notes</title><link href="https://www.evandowning.com/my-dj-notes.html" rel="alternate"/><published>2025-09-13T00:00:00-04:00</published><updated>2025-09-13T00:00:00-04:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2025-09-13:/my-dj-notes.html</id><summary type="html">&lt;p&gt;This post is about my DJing experience for Brazilian Zouk.&lt;/p&gt;
&lt;h2&gt;Equipment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Laptop&lt;ul&gt;
&lt;li&gt;MacBook Pro M4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Software&lt;ul&gt;
&lt;li&gt;Serato DJ Pro&lt;/li&gt;
&lt;li&gt;Make sure you get the "Pitch 'n Time" extension tool&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Controller&lt;ul&gt;
&lt;li&gt;Roland DJ-202 (it came with Serato DJ Pro)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Backpack&lt;ul&gt;
&lt;li&gt;Rockville 25-Key Case Soft Carry Bag Backpack For 25-Key Keyboards Midi …&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;This post is about my DJing experience for Brazilian Zouk.&lt;/p&gt;
&lt;h2&gt;Equipment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Laptop&lt;ul&gt;
&lt;li&gt;MacBook Pro M4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Software&lt;ul&gt;
&lt;li&gt;Serato DJ Pro&lt;/li&gt;
&lt;li&gt;Make sure you get the "Pitch 'n Time" extension tool&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Controller&lt;ul&gt;
&lt;li&gt;Roland DJ-202 (it came with Serato DJ Pro)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Backpack&lt;ul&gt;
&lt;li&gt;Rockville 25-Key Case Soft Carry Bag Backpack For 25-Key Keyboards Midi Controllers&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/dp/B079ZS9L7L"&gt;https://www.amazon.com/dp/B079ZS9L7L&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Headphones&lt;ul&gt;
&lt;li&gt;Audio-Technica ATH-M50x&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/Audio-Technica-ATH-M50x-Professional-Monitor-Headphones"&gt;https://www.amazon.com/Audio-Technica-ATH-M50x-Professional-Monitor-Headphones&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Laptop stand&lt;ul&gt;
&lt;li&gt;Crane Stand Classic Laptop Stand&lt;/li&gt;
&lt;li&gt;I don't think it's available anymore, but you can find something similar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Audio Cables&lt;ul&gt;
&lt;li&gt;Hosa, Phone Mono 6.3 Mm to RCA Cable (CPR-202): &lt;a href="https://www.amazon.com/dp/B000068O17"&gt;https://www.amazon.com/dp/B000068O17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;yueton 2 Pack 3.5mm Female to Dual RCA Cable 6 Inch: &lt;a href="https://www.amazon.com/dp/B0156F38LG"&gt;https://www.amazon.com/dp/B0156F38LG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where do I get songs from?&lt;/h2&gt;
&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;A lot of my songs are old (shared between friends from the days of iTunes and iPods). Others have been purchased from or released for free by various artists (pay attention to their social media 😉).&lt;/p&gt;
&lt;p&gt;Over the years, I've collected 500-600 zouk (or zoukable) songs 👀 I'm always listening for new songs I hear from Youtube, Zouk events, TV shows (the Bachelor series is great for new songs), or while walking through the airport.&lt;/p&gt;
&lt;p&gt;Feel free to email DJs personally -- they're very kind and responsive and generally love to share or sell their hard work to help you get your Zouk song collection started!&lt;/p&gt;
&lt;h4&gt;DJs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;DJ Kakah: &lt;a href="https://www.djkakah.com"&gt;https://www.djkakah.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DJ Alexy: &lt;a href="https://soundcloud.com/dj-alexy-874739139"&gt;https://soundcloud.com/dj-alexy-874739139&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DJ Calado: &lt;a href="https://soundcloud.com/djcalado"&gt;https://soundcloud.com/djcalado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BCD Zoukreators: &lt;a href="https://www.youtube.com/@BCDZoukreators"&gt;https://www.youtube.com/@BCDZoukreators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Music&lt;/h4&gt;
&lt;p&gt;You can download songs for free from YouTube: &lt;a href="https://github.com/yt-dlp/yt-dlp"&gt;https://github.com/yt-dlp/yt-dlp&lt;/a&gt;. It's not the best audio quality, but it's good enough in my experience. In general, dancers won't notice, but other DJs (or audiophiles) will 😉&lt;/p&gt;
&lt;h2&gt;Strategy&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DJ by feel (does what I do sound good?)&lt;/li&gt;
&lt;li&gt;Simplicity (don't complicate things -- DJ smarter, not harder)&lt;/li&gt;
&lt;li&gt;Practice! Practice! Practice! (I use socials to practice -- no need to practice at home all the time)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Transitioning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Key (harmonic)&lt;/li&gt;
&lt;li&gt;Energy (match)&lt;/li&gt;
&lt;li&gt;BPM (match)&lt;/li&gt;
&lt;li&gt;Find your hot cue&lt;/li&gt;
&lt;li&gt;Loop in&lt;/li&gt;
&lt;li&gt;Adjust volume/bass/treble/etc.&lt;/li&gt;
&lt;li&gt;Transition&lt;/li&gt;
&lt;li&gt;Loop out&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I've never received formal training. Each DJ's style is different. You'll find your own style and songs you like to play. Just make sure you enjoy it!&lt;/p&gt;
&lt;p&gt;If you want a professional class, please check out DJ Kakah's courses. She is an expert. I am not. &lt;a href="https://www.djkakah.com/challenges"&gt;https://www.djkakah.com/challenges&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Picking songs&lt;/h3&gt;
&lt;p&gt;I'm selfish. I pick songs I like, first and foremost. If I don't like what I'm playing, I can't enjoy it.&lt;/p&gt;
&lt;p&gt;Adjust songs to be between 70-80 BPM. Use whatever you think sounds best.&lt;/p&gt;
&lt;h3&gt;Picking the next song&lt;/h3&gt;
&lt;p&gt;I look at songs that would harmonize with the current song playing. I listen to a new song on my headphones while the other song is playing live.&lt;/p&gt;
&lt;h3&gt;How to find songs that harmonize&lt;/h3&gt;
&lt;p&gt;Songs have keys. You can configure your DJ software (like Serato) to label song keys using the Camelot notation. This makes it easier for you to know which songs will harmonize and which won't.&lt;/p&gt;
&lt;p&gt;The next song should have either (but NOT both):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;+/- one letter&lt;/li&gt;
&lt;li&gt;+/- one number&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Play around and see what sounds good to you!&lt;/p&gt;
&lt;h3&gt;How to find songs with the same "energy"&lt;/h3&gt;
&lt;p&gt;Trial-and-error. Skip through the song you're previewing. See where it's best to start and end the song. You can even color-code songs with similar energy for yourself to note for your future sets.&lt;/p&gt;
&lt;h3&gt;How to transition so it's not distracting for dancers&lt;/h3&gt;
&lt;p&gt;Loop an introduction (beat or vocals). Gradually transition so that the dancers "hear" that loop. Move the volumes, reduce the bass in the current song, increase the base in the next song, decrease the treble in the current song, and exit the next song's loop so it continues.&lt;/p&gt;
&lt;h2&gt;The Camelot Wheel&lt;/h2&gt;
&lt;p align="center"&gt;
  &lt;img src="/images/zouk/camelot.webp"&gt;
&lt;/p&gt;</content><category term="zouk"/></entry><entry><title>Workflow</title><link href="https://www.evandowning.com/workflow.html" rel="alternate"/><published>2024-11-11T00:00:00-05:00</published><updated>2025-10-28T00:00:00-04:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2024-11-11:/workflow.html</id><summary type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This post discusses my workflows. I am sharing it in case it is helpful for others to read.&lt;/p&gt;
&lt;h2&gt;Monday - Thursday&lt;/h2&gt;
&lt;h3&gt;Administrative&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read unread emails and unread Slack messages. Respond to everything.&lt;/li&gt;
&lt;li&gt;Check personal goals and their progress for the year.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gutcheck Projects&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Review each project's motivation, goals, "secret sauce …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This post discusses my workflows. I am sharing it in case it is helpful for others to read.&lt;/p&gt;
&lt;h2&gt;Monday - Thursday&lt;/h2&gt;
&lt;h3&gt;Administrative&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read unread emails and unread Slack messages. Respond to everything.&lt;/li&gt;
&lt;li&gt;Check personal goals and their progress for the year.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gutcheck Projects&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Review each project's motivation, goals, "secret sauce", current status, and timeline to finish. Do they make sense?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.darpa.mil/work-with-us/heilmeier-catechism"&gt;Heilmeier Catechism&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;What are you trying to do? Articulate your objectives using absolutely no jargon.&lt;/li&gt;
&lt;li&gt;How is it done today, and what are the limits of current practice?&lt;/li&gt;
&lt;li&gt;What is new in your approach and why do you think it will be successful?&lt;/li&gt;
&lt;li&gt;Who cares? If you are successful, what difference will it make?&lt;/li&gt;
&lt;li&gt;What are the risks?&lt;/li&gt;
&lt;li&gt;How much will it cost?&lt;/li&gt;
&lt;li&gt;How long will it take?&lt;/li&gt;
&lt;li&gt;What are the midterm and final "exams" to check for success?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Writing papers&lt;ul&gt;
&lt;li&gt;What problem are you solving?&lt;/li&gt;
&lt;li&gt;Why is it an important problem?&lt;/li&gt;
&lt;li&gt;What are the existing approaches? Why are they not sufficient?&lt;/li&gt;
&lt;li&gt;What is your approach? Why is it more effective, efficient, novel, etc?&lt;/li&gt;
&lt;li&gt;How do you implement it? Why is that a good and practical way?&lt;/li&gt;
&lt;li&gt;How do you evaluate your approach and system? Why is the evaluation fair and realistic? How do the results support the goals and claims of your approach and system?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href="http://www.evandowning.com/suggested-reads.html"&gt;Read&lt;/a&gt; academic papers and blog posts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;For papers, create a summary:&lt;ul&gt;
&lt;li&gt;Problem&lt;/li&gt;
&lt;li&gt;Existing approaches and their limitations&lt;/li&gt;
&lt;li&gt;Approach&lt;/li&gt;
&lt;li&gt;Evaluation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Coding&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Review Pull Requests.&lt;/li&gt;
&lt;li&gt;Work on code for each project.&lt;/li&gt;
&lt;li&gt;Automate linting and tests via &lt;a href="https://github.com/features/actions"&gt;Github actions&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Friday&lt;/h2&gt;
&lt;h3&gt;Start of Day&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Administrative&lt;/li&gt;
&lt;li&gt;Gutcheck Projects&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Write&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Brainstorm research ideas&lt;ul&gt;
&lt;li&gt;Focus on defining the problem. If you define the problem well enough, the solution will become clear.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Work on the draft of academic paper or client report&lt;ul&gt;
&lt;li&gt;This is an up-to-date version of the final draft. The weekly meetings serve as snapshots of the final draft, so you can track the evolution of the project.&lt;/li&gt;
&lt;li&gt;The story for the project (motivation)&lt;/li&gt;
&lt;li&gt;Outline the evaluation (how you will measure success)&lt;/li&gt;
&lt;li&gt;Fill in results as you get them each day (if you were successful)&lt;/li&gt;
&lt;li&gt;Working on the final draft of the paper or report helps you not leave things until the last minute&lt;/li&gt;
&lt;li&gt;Save filling in the rest (introduction, related works, discussion) until the week before you submit&lt;/li&gt;
&lt;li&gt;Two days before the deadline, every co-author should have read the final draft and made comments/edits&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Starting a New Project&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create a Google Drive of Documents and Slides:&lt;ul&gt;
&lt;li&gt;Related Works (Folder containing PDFs of papers referenced in &lt;code&gt;Background&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Background (Doc which lists and summarizes related works and existing solutions)&lt;/li&gt;
&lt;li&gt;Brainstorming (Doc containing ideas I have)&lt;/li&gt;
&lt;li&gt;Meetings (Doc of meeting minutes of me presenting the idea to others)&lt;/li&gt;
&lt;li&gt;Overview (Doc of Heilmeier Catechism for planning, Ongoing Summary for up-to-date status of project. See &lt;a href="#gutcheck-projects"&gt;Gutcheck Projects&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Slides (Presentation during meetings with status updates)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go Fast!&lt;ul&gt;
&lt;li&gt;To start, search &lt;a href="https://scholar.google.com/"&gt;Google Scholar&lt;/a&gt; and &lt;a href="https://scholar.google.com/scholar_labs/search"&gt;Scholar Labs&lt;/a&gt; for existing works in top-tier conferences. Put these in your &lt;code&gt;Related Works&lt;/code&gt; folder -- just download, drag, and drop.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://notebooklm.google/"&gt;NotebookLM&lt;/a&gt;. Add your &lt;code&gt;Background&lt;/code&gt;, &lt;code&gt;Brainstorming&lt;/code&gt;, and &lt;code&gt;Overview&lt;/code&gt; Docs as well as all papers in &lt;code&gt;Related Works/&lt;/code&gt; Ask it research questions, brainstorm ideas, list experiments to perform (and in what order, such that each tells you the most information about what to do next), etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go Slow!&lt;ul&gt;
&lt;li&gt;Read through claims from LLMs about novel research directions and summaries of prior works. Fact check everything. Carefully craft your research direction and list of experiments to perform.&lt;/li&gt;
&lt;li&gt;Create rapid software prototypes and measurements against the state-of-the-art. Ask NotebookLM to craft prompts to give to LLMs to quickly develop these prototypes -- double-check each implementation carefully.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Writing Proposals&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Create an overview diagram of what the system will look like. What happens first, second, third, etc. in the pipeline. What is the input? What is the output?&lt;/li&gt;
&lt;li&gt;Write &amp;amp; submit an abstract describing the solution. What is the goal? What are the constraints? What is the approach? What are the expected results?&lt;/li&gt;
&lt;li&gt;Fill in the front and back matter on the proposal. Now you know how many pages you have to work with to write the technical content.&lt;/li&gt;
&lt;li&gt;Create a real-world motivating example (1-2 paragraphs) you will use throughout the proposal.&lt;ul&gt;
&lt;li&gt;This is a framing device to go back and talk about how the solution will handle each challenge in the motivating example.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Split the system into components (which should already be apparent by the diagram) and assign engineers to tackle each part.&lt;/li&gt;
&lt;li&gt;Make sure you include the exact metrics the BAA is asking for and say how your solution will accomplish them.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Leadership&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Break each project down into 2 or 3 parts, and assign each person one part to own.&lt;/li&gt;
&lt;li&gt;For each project, have an end-goal in mind and an end-date. I.e., what specifically do you want to accomplish by when?&lt;/li&gt;
&lt;li&gt;Everyone self-updates their progress for you to present at status updates, as well as allows you to ask and answer questions there (an internal Google Doc).&lt;/li&gt;
&lt;li&gt;For each status update, create slides and meeting minutes (shared with the client). Have action items they agree to (ranked by importance) for the next meeting.&lt;/li&gt;
&lt;li&gt;For each status update presentation, create ~6 slides to share with the client. That way, it is easy for them to track your progress over time.&lt;ul&gt;
&lt;li&gt;Agenda&lt;/li&gt;
&lt;li&gt;Running list of Insights and Contributions&lt;/li&gt;
&lt;li&gt;2-3 updates (visual/graph/numbers of results)&lt;/li&gt;
&lt;li&gt;Insights for each update -- What did I learn? What is novel/interesting?&lt;/li&gt;
&lt;li&gt;Next steps -- From what I learned last week, what will I do this week?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If you are away on leave, assign someone to lead in your place, and notify the client who the lead contact will be until you get back. No major changes to the project should be made until you return, unless absolutely necessary.&lt;/li&gt;
&lt;li&gt;Overspend on the front end of a project, so you can get far enough along that you can divert your attention if needed (e.g., a proposal needs your attention or you have meetings/trainings/other responsibilities to take care of later).&lt;/li&gt;
&lt;li&gt;Every time there is a problem or something does not go according to plan, ask the Five Whys (from The Lean Startup book). Ask "why" 5 times, and you will usually identify the root cause of an issue. Fix the fifth (final) "why" first, then fix the other "whys" if they pop up again. Blame the problem, not the person. If someone makes a mistake, it is our fault it was easy for them to make that mistake.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Retrospective&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;After each project is finished, do a retrospective for lessons learned.&lt;ul&gt;
&lt;li&gt;What went right? Why did it go right?&lt;/li&gt;
&lt;li&gt;What went wrong? Why did it go wrong? What will we do to prevent this in the future?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/></entry><entry><title>Documenting Malware for Research</title><link href="https://www.evandowning.com/documenting-malware-for-research.html" rel="alternate"/><published>2022-09-08T00:00:00-04:00</published><updated>2022-09-08T00:00:00-04:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2022-09-08:/documenting-malware-for-research.html</id><summary type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When I first began my PhD, my advisor suggested I go through various malware source codes (released openly on the Internet) to compile, execute, understand, and document them for future use.&lt;/p&gt;
&lt;p&gt;This inevitably paid off, in that it helped me more easily create ground-truth for my datasets and experiments …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When I first began my PhD, my advisor suggested I go through various malware source codes (released openly on the Internet) to compile, execute, understand, and document them for future use.&lt;/p&gt;
&lt;p&gt;This inevitably paid off, in that it helped me more easily create ground-truth for my datasets and experiments.&lt;/p&gt;
&lt;p&gt;Over the years, I've built up a repository of malware source code, along with compilation instructions and documentation on how to run and use the malware -- overall, how the malware works on the inside.&lt;/p&gt;
&lt;p&gt;I've been asked by various colleagues to open-source this repo to aid in the education and research of malware analysis and detection.&lt;/p&gt;
&lt;h2&gt;Why is this difficult?&lt;/h2&gt;
&lt;p&gt;There are many places to get malware source code from. At the time of this writing, these are two of the most popular sources today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thezoo.morirt.com/"&gt;theZoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vxunderground/MalwareSourceCode"&gt;vxunderground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What's great is that these repos contain malware sources as they originally existed when they were leaked or released.&lt;/p&gt;
&lt;p&gt;What's not so great is that these malware source repositories are not clean. They contain lots of garbage files (e.g., temporary files, database files, incomplete source files, etc.) and the documentation on how to compile and use them is either incomplete or non-existent.&lt;/p&gt;
&lt;p&gt;In addition, not all malware run on the same operating system. There are malware for Windows, MacOS, Linux, Android, and iOS. Some Windows malware assume Windows XP, while others assume Windows 10. Some malware even assume specific software versions, in order to exploit that particular version. Thus any released code must be able to compile and execute the malware as it was intended -- which is not an easy feat. The documentation must include instructions on how to set up complete environments so that the malware will behave as the author expected it to.&lt;/p&gt;
&lt;p&gt;My goal is to create a git repo where I can share these same malware source files, but accompany them with good documentation on how to operate them.
The sole purpose is to facilitate an easy way for a researcher to test their solutions (e.g., dynamic analysis, static analysis, malware detection, etc.) on real-world malware samples, straight from the source. This allows the researcher complete control over the sample, so they can experiment with it in a safe environment.&lt;/p&gt;
&lt;h2&gt;What's the plan?&lt;/h2&gt;
&lt;p&gt;This blog series will dive deep into the history of malware.&lt;/p&gt;
&lt;p&gt;Over time I will release more samples as I clean and document them.&lt;/p&gt;
&lt;p&gt;Some posts may be out of order chronologically, and some may be incomplete as I add more malware and content.&lt;/p&gt;
&lt;p&gt;Consider this series as a constant work-in-progress.&lt;/p&gt;
&lt;h2&gt;Where can I follow this?&lt;/h2&gt;
&lt;p&gt;I will be releasing all source code and documentation here: &lt;a href="https://github.com/evandowning/usable-malware"&gt;https://github.com/evandowning/usable-malware&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I will be blogging about each sample here on my website: &lt;a href="https://www.evandowning.com/tag/usable-malware.html"&gt;https://www.evandowning.com/tag/usable-malware.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Final thoughts&lt;/h2&gt;
&lt;p&gt;This is going to be a long process, and will be accomplished during my free time.&lt;/p&gt;
&lt;p&gt;What will take time is documenting how a researcher without access to older versions of VisualStudio (which some of these malware require) will compile and use these samples. I will likely need to update the sample sources to be compatible with the newest versions of Visual Studio. I also plan to write &lt;a href="https://resources.github.com/ci-cd/"&gt;CI/CD&lt;/a&gt; pipelines to ensure the malware doesn't breaking in the future.&lt;/p&gt;
&lt;p&gt;If you have any complaints of incomplete or incorrect documentation, please open an issue in the git repo above.&lt;/p&gt;
&lt;p&gt;If you have any contributions, please create a pull request.&lt;/p&gt;
&lt;p&gt;I hope this is useful for you.&lt;/p&gt;</content><category term="malware"/><category term="malware"/><category term="usable-malware"/></entry><entry><title>Things I Use</title><link href="https://www.evandowning.com/things-i-use.html" rel="alternate"/><published>2021-01-01T00:00:00-05:00</published><updated>2026-03-01T00:00:00-05:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2021-01-01:/things-i-use.html</id><summary type="html">&lt;h2&gt;Personal&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Web browser: &lt;a href="https://brave.com/"&gt;Brave Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email/Calendar/Drive/VPN/Password manager: &lt;a href="https://proton.me/"&gt;Proton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Private messaging: &lt;a href="https://signal.org/"&gt;Signal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multi-factor authentication: &lt;a href="https://www.yubico.com/"&gt;YubiKey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Transcriber: &lt;a href="https://goodsnooze.gumroad.com/l/macwhisper"&gt;MacWhisper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating screen demos: &lt;a href="https://obsproject.com/"&gt;OSB Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating terminal demos: &lt;a href="https://asciinema.org/"&gt;asciinema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Writing papers: &lt;a href="https://www.overleaf.com/"&gt;Overleaf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Writing assistant: &lt;a href="https://www.grammarly.com/"&gt;Grammarly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating figures: &lt;a href="https://inkscape.org/"&gt;Inkscape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Paper organizer &amp;amp; RSS feed reader: &lt;a href="https://www.zotero.org/"&gt;Zotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Time shifting: &lt;a href="https://www.timeshifter.com/"&gt;Timeshifter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download video/audio …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h2&gt;Personal&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Web browser: &lt;a href="https://brave.com/"&gt;Brave Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email/Calendar/Drive/VPN/Password manager: &lt;a href="https://proton.me/"&gt;Proton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Private messaging: &lt;a href="https://signal.org/"&gt;Signal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multi-factor authentication: &lt;a href="https://www.yubico.com/"&gt;YubiKey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Transcriber: &lt;a href="https://goodsnooze.gumroad.com/l/macwhisper"&gt;MacWhisper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating screen demos: &lt;a href="https://obsproject.com/"&gt;OSB Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating terminal demos: &lt;a href="https://asciinema.org/"&gt;asciinema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Writing papers: &lt;a href="https://www.overleaf.com/"&gt;Overleaf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Writing assistant: &lt;a href="https://www.grammarly.com/"&gt;Grammarly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating figures: &lt;a href="https://inkscape.org/"&gt;Inkscape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Paper organizer &amp;amp; RSS feed reader: &lt;a href="https://www.zotero.org/"&gt;Zotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Time shifting: &lt;a href="https://www.timeshifter.com/"&gt;Timeshifter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download video/audio: &lt;a href="https://github.com/yt-dlp/yt-dlp"&gt;yt-dlp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Genealogy: &lt;a href="https://gramps-project.org/blog/"&gt;gramps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tor: &lt;a href="https://www.torproject.org/"&gt;Tor Browser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Software Development&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Time tracking: &lt;a href="https://toggl.com/"&gt;toggl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bootstrapping &amp;amp; Dotfiles: &lt;a href="https://yadm.io/"&gt;yadm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE: &lt;a href="https://code.visualstudio.com/"&gt;VS Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Text &amp;amp; Hex editor: &lt;a href="https://www.vim.org/"&gt;vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source code version control: &lt;a href="https://git-scm.com/"&gt;git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Project development, CI/CD: &lt;a href="https://github.com/"&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python packaging &amp;amp; version management: &lt;a href="https://docs.astral.sh/uv/"&gt;uv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python code template: &lt;a href="https://github.com/trailofbits/cookiecutter-python"&gt;cookiecutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Configuring Claude Code: &lt;a href="https://github.com/trailofbits/claude-code-config"&gt;claude-code-config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/compiler-explorer/compiler-explorer"&gt;Compiler Explorer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Analysis Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Dynamic analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automated Sandbox (malware): &lt;a href="https://github.com/kevoreilly/CAPEv2"&gt;CAPEv2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Honeypot: &lt;a href="https://github.com/cowrie/cowrie"&gt;cowrie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Debugging on Windows: &lt;a href="https://github.com/x64dbg/x64dbg"&gt;x64dbg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Debugging on GNU/Linux: &lt;a href="https://www.sourceware.org/gdb/"&gt;gdb&lt;/a&gt; with (&lt;a href="https://github.com/evandowning/Gdbinit/tree/develop"&gt;gdbinit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Network traffic collection &amp;amp; analysis: &lt;a href="https://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fuzzing:&lt;ul&gt;
&lt;li&gt;C++: &lt;a href="https://github.com/google/fuzztest"&gt;fuzztest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java: &lt;a href="https://github.com/CodeIntelligenceTesting/jazzer"&gt;jazzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python: &lt;a href="https://github.com/google/atheris"&gt;atheris&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Concolic execution: &lt;a href="https://angr.io/"&gt;angr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Static analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unpacking: &lt;a href="https://github.com/unipacker/unipacker"&gt;unipacker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Disassembling &amp;amp; Decompiling: &lt;a href="https://github.com/NationalSecurityAgency/ghidra"&gt;Ghidra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Locating security bugs: &lt;a href="https://codeql.github.com/"&gt;CodeQL&lt;/a&gt; and &lt;a href="https://semgrep.dev/"&gt;Semgrep&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pentesting framework: &lt;a href="https://www.kali.org/"&gt;kali&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;LLM Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Interacting with LLMs locally: &lt;a href="https://anythingllm.com/"&gt;AnythingLLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implementing LLM-based solutions:&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ai.pydantic.dev/"&gt;Pydantic AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.litellm.ai/"&gt;LiteLLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://langfuse.com/"&gt;LangFuse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Ongoing Skills Development&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Programming: &lt;a href="https://leetcode.com/"&gt;leetcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reverse engineering Windows binaries: &lt;a href="https://flare-on.com/"&gt;flare-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux Hacking: &lt;a href="https://pwnable.kr/"&gt;pwnable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;System Design: &lt;a href="https://www.designgurus.io/course/grokking-the-system-design-interview"&gt;course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Operating System Engineering: &lt;a href="https://github.com/mit-pdos/xv6-riscv"&gt;xv6&lt;/a&gt; and &lt;a href="https://pdos.csail.mit.edu/6.1810"&gt;course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Presenting Data and Information by Edward Tufte: &lt;a href="https://www.edwardtufte.com/online-course/"&gt;course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/></entry><entry><title>Benchmarking Neo4j</title><link href="https://www.evandowning.com/benchmarking-neo4j.html" rel="alternate"/><published>2019-05-19T00:00:00-04:00</published><updated>2019-05-19T00:00:00-04:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2019-05-19:/benchmarking-neo4j.html</id><summary type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://neo4j.com/"&gt;Neo4j&lt;/a&gt; is a graph database implementation. It's used for creating large graphs to efficiently create and query various relationships. For an explanation on the differences between graph databases and relational database (like &lt;a href="https://www.mysql.com/"&gt;MySQL&lt;/a&gt; and &lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;), see &lt;a href="https://neo4j.com/developer/graph-db-vs-rdbms/"&gt;https://neo4j.com/developer/graph-db-vs-rdbms/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I required Neo4j for one of my projects …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://neo4j.com/"&gt;Neo4j&lt;/a&gt; is a graph database implementation. It's used for creating large graphs to efficiently create and query various relationships. For an explanation on the differences between graph databases and relational database (like &lt;a href="https://www.mysql.com/"&gt;MySQL&lt;/a&gt; and &lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;), see &lt;a href="https://neo4j.com/developer/graph-db-vs-rdbms/"&gt;https://neo4j.com/developer/graph-db-vs-rdbms/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I required Neo4j for one of my projects and one of the issues we were running into was that it was taking a long time to create our massive graphs (10s of millions of nodes with 100s of millions of edges). We had read that Neo4j was completely capable of handling graphs of this size (and larger) but couldn't figure out why our methods of creating our graphs were so slow.&lt;/p&gt;
&lt;p&gt;Unfortunately I couldn't find anyone online who had done benchmarking on creating various sizes of graphs using the different ways of creating a Neo4j graph (which I will explain below). So I thought this was a great opportunity to write some code to test the various ways of creating Neo4j graphs and share my results with anyone interested in answering the same question.&lt;/p&gt;
&lt;h2&gt;Creating Neo4j Graphs the "Normal" Way&lt;/h2&gt;
&lt;p&gt;When you first read Neo4j tutorials on creating graphs, they probably mention something about &lt;code&gt;MERGE&lt;/code&gt; for creating Nodes and &lt;code&gt;CREATE&lt;/code&gt; for creating Edges. &lt;code&gt;MERGE&lt;/code&gt; is helpful because it will simultaneously check and create a unique node if it does not exist. If &lt;code&gt;MERGE&lt;/code&gt; didn't exist, you would have to create some &lt;code&gt;MATCH&lt;/code&gt; condition to say "if this node doesn't exist yet, create it". In the graphs for my project, all of the nodes and edges had to be unique.&lt;/p&gt;
&lt;p&gt;Our &lt;strong&gt;first&lt;/strong&gt; implementation just contained those simple queries: Create a node and create an edge. That ended up being very slow (taking 40 seconds to create a graph with 1000 nodes and 1000 edges). So the &lt;strong&gt;second&lt;/strong&gt; thing we tried was creating each node and edge in the same query (as opposed to creating each individual node and edge within individual queries). Another thing we added was creating all nodes and edges first and then creating the remaining unconnected nodes at the end. We also tried adding an &lt;code&gt;INDEX&lt;/code&gt; to each node as well. This implementation was faster than the first, but still too slow for our needs. Our test graph (1000 nodes and 1000 edges) took roughly 30 seconds to create.&lt;/p&gt;
&lt;p&gt;Then we found a query called a &lt;code&gt;CONSTRAINT&lt;/code&gt; which allows the user to create some logical rule for the graph database to follow. For us, it was to only accept unique nodes and edges. But this &lt;strong&gt;third&lt;/strong&gt; implementation also wasn't very fast. Finally we tried getting rid of both &lt;code&gt;INDEX&lt;/code&gt; and &lt;code&gt;CONSTRAINT&lt;/code&gt; to see if that was bogging anything down, but to no avail. Our &lt;strong&gt;fourth&lt;/strong&gt; implementation had failed us.&lt;/p&gt;
&lt;p&gt;We then created a &lt;strong&gt;batch&lt;/strong&gt; implementation where we would batch multiple queries into one (a similar technique used on relational databases). Unfortunately this ended up being slower than our first implementation. Needless to say we were frustrated, but knew there must be a solution that Neo4j provides us.&lt;/p&gt;
&lt;h2&gt;Pause for Consideration&lt;/h2&gt;
&lt;p&gt;These timings may sound fast to someone with sufficiently small graphs, but it would take us nearly 10 days to create a single graph with 10s of millions of nodes and 100s of millions of edges (which was way too slow for our needs). Our particular application required streaming graph data to our server where we would need to create these large graphs in realtime (and 10 days was barely realtime). Also we noticed that creating the graphs slowed over time as the graph size grew, so our guestimate of 10 days was actually much smaller compared to what we experienced in reality.&lt;/p&gt;
&lt;h2&gt;Creating Neo4j Graphs the Efficient Way&lt;/h2&gt;
&lt;p&gt;After scouring the Internet for a day or so, we happened upon two query methods used to create graphs quickly: &lt;code&gt;UNWIND&lt;/code&gt; and &lt;code&gt;LOADCSV&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;One can think of &lt;code&gt;UNWIND&lt;/code&gt; as the proper way to use batching in Neo4j (like we had tried to emulate above for batching for relational databases). Immediately we saw fantastic results. The time it took to create a graph decreased by an order of magnitude (our 1000 node 1000 edge graph took seconds). Unfortunately during our evaluation of our project, it still was slower than realtime after a day or so of running it with our streaming data. It eventually caught up, but after several days of letting it run after our streaming data stopped after 2 weeks.&lt;/p&gt;
&lt;p&gt;Finally we found the best implementation. &lt;code&gt;LOADCSV&lt;/code&gt; is by far the fastest way to create large graphs. It had been touted as being able
to create a 30 million node graph in minutes &lt;a href="https://neo4j.com/blog/import-10m-stack-overflow-questions/"&gt;https://neo4j.com/blog/import-10m-stack-overflow-questions/&lt;/a&gt;. When we implemented using it ourselves it decreased our graph creation time down to 0.17 seconds. Another order of magnitude difference!&lt;/p&gt;
&lt;p&gt;But we were also curious in knowing how much different types and sizes of graphs affected the creation time. Below are various timing bar charts of our results:&lt;/p&gt;
&lt;h2&gt;10 nodes, 10 edges&lt;/h2&gt;
&lt;p align="center"&gt;
  &lt;img src="/images/coding-fun/neo4j_fig/10x10.png"&gt;
&lt;/p&gt;

&lt;h2&gt;1000 nodes, 1000 edges&lt;/h2&gt;
&lt;p align="center"&gt;
  &lt;img src="/images/coding-fun/neo4j_fig/1000x1000.png"&gt;
&lt;/p&gt;

&lt;h2&gt;1000 nodes, 10 edges (sparse graph)&lt;/h2&gt;
&lt;p align="center"&gt;
  &lt;img src="/images/coding-fun/neo4j_fig/1000x10.png"&gt;
&lt;/p&gt;

&lt;h2&gt;10 nodes, 1000 edges (dense graph)&lt;/h2&gt;
&lt;p align="center"&gt;
  &lt;img src="/images/coding-fun/neo4j_fig/10x1000.png"&gt;
&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;If you're creating a large graph in Neo4j, use &lt;code&gt;LOADCSV&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can check out all of my source code used to perform my experiments to test for yourself: &lt;a href="https://github.com/evandowning/neo4j-benchmark"&gt;https://github.com/evandowning/neo4j-benchmark&lt;/a&gt;&lt;/p&gt;</content><category term="coding-fun"/><category term="neo4j"/></entry><entry><title>Converting Protonmail's VCF files to import to phone</title><link href="https://www.evandowning.com/converting-protonmails-vcf-files-to-import-to-phone.html" rel="alternate"/><published>2019-05-19T00:00:00-04:00</published><updated>2019-05-19T00:00:00-04:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2019-05-19:/converting-protonmails-vcf-files-to-import-to-phone.html</id><summary type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://protonmail.com"&gt;Protonmail&lt;/a&gt; captured my interest a few years ago as privacy-focused alternative to &lt;a href="http://gmail.com"&gt;Gmail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But one of the problems I faced was my dependence on Google's &lt;a href="https://contacts.google.com"&gt;Contacts&lt;/a&gt; service which kept all of my contacts for me stored on my Android device. I wanted to move away from this as well …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://protonmail.com"&gt;Protonmail&lt;/a&gt; captured my interest a few years ago as privacy-focused alternative to &lt;a href="http://gmail.com"&gt;Gmail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But one of the problems I faced was my dependence on Google's &lt;a href="https://contacts.google.com"&gt;Contacts&lt;/a&gt; service which kept all of my contacts for me stored on my Android device. I wanted to move away from this as well. But I also have an animosity towards having email on my phone.&lt;/p&gt;
&lt;p&gt;So without installing Protonmail on my phone, how could I take my contacts stored on Protonmail and put them on my phone?&lt;/p&gt;
&lt;p&gt;Well one obvious way was to export Protonmail's contacts to a &lt;a href="https://en.wikipedia.org/wiki/VCard"&gt;VCF&lt;/a&gt; file and import that onto my phone. Unfortunately, Protonmail's VCF file was using version 4.0, while my phone (Android version 8) was still stuck on VCF version 2.1. And I wasn't the only one with issues with converting VCF file format versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://alessandrorossini.org/the-sad-story-of-the-vcard-format-and-its-lack-of-interoperability/"&gt;https://alessandrorossini.org/the-sad-story-of-the-vcard-format-and-its-lack-of-interoperability/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://android.stackexchange.com/questions/106888/what-vcard-formats-versions-and-encodings-are-supported-for-import"&gt;https://android.stackexchange.com/questions/106888/what-vcard-formats-versions-and-encodings-are-supported-for-import&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nextcloud/contacts/issues/492"&gt;https://github.com/nextcloud/contacts/issues/492&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tenorshare.com/icloud-tips/cannot-import-vcf-vcards-into-icloud-how-to-fix.html"&gt;https://www.tenorshare.com/icloud-tips/cannot-import-vcf-vcards-into-icloud-how-to-fix.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But all of the tools I found went from version 2.1 to something newer. I couldn't find any converters from a newer version down to an older version.&lt;/p&gt;
&lt;p&gt;Protonmail (at the time of this post) uses version 4.0. So I wrote a converter from version 4.0 (Protonmail) to version 2.1 (what Android still uses).&lt;/p&gt;
&lt;p&gt;You can find my converter here: &lt;a href="https://github.com/evandowning/vcf-converter"&gt;https://github.com/evandowning/vcf-converter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So everytime my Protonmail contacts get updated, I export them to a VCF file, convert it to version 2.1, and transfer it to my Android device to be imported locally.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;</content><category term="coding-fun"/><category term="protonmail"/><category term="vcf"/></entry><entry><title>Datasets</title><link href="https://www.evandowning.com/datasets.html" rel="alternate"/><published>2019-01-01T00:00:00-05:00</published><updated>2023-02-18T00:00:00-05:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2019-01-01:/datasets.html</id><summary type="html">&lt;p&gt;This is a good website for lots of general cybersecurity datasets: &lt;a href="http://www.secrepo.com/"&gt;http://www.secrepo.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Malware Samples&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Large dataset: &lt;a href="https://github.com/sophos/SOREL-20M"&gt;https://github.com/sophos/SOREL-20M&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Malware from 2010-today: &lt;a href="https://www.vx-underground.org/"&gt;https://www.vx-underground.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Gathering Data&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Static features for PE malware classification: &lt;a href="https://github.com/elastic/ember"&gt;https://github.com/elastic/ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dynamic features for clustering PE malware …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;This is a good website for lots of general cybersecurity datasets: &lt;a href="http://www.secrepo.com/"&gt;http://www.secrepo.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Malware Samples&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Large dataset: &lt;a href="https://github.com/sophos/SOREL-20M"&gt;https://github.com/sophos/SOREL-20M&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Malware from 2010-today: &lt;a href="https://www.vx-underground.org/"&gt;https://www.vx-underground.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Gathering Data&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Static features for PE malware classification: &lt;a href="https://github.com/elastic/ember"&gt;https://github.com/elastic/ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dynamic features for clustering PE malware: &lt;a href="https://github.com/rieck/malheur"&gt;https://github.com/rieck/malheur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Executing samples to collect dynamic behaviors: &lt;a href="https://github.com/kevoreilly/CAPEv2"&gt;https://github.com/kevoreilly/CAPEv2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/></entry><entry><title>Markov Text Generator</title><link href="https://www.evandowning.com/markov-text-generator.html" rel="alternate"/><published>2016-01-16T00:00:00-05:00</published><updated>2016-01-16T00:00:00-05:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2016-01-16:/markov-text-generator.html</id><summary type="html">&lt;p&gt;For fun, I've recently created my own &lt;a href="https://en.wikipedia.org/wiki/Markov_chain"&gt;Markov&lt;/a&gt; text generator.&lt;/p&gt;
&lt;h2&gt;Explanation&lt;/h2&gt;
&lt;p&gt;A Markov text generator takes a piece of text as input and outputs new text that is seemingly random. It may even make syntactical and/or semantic sense if properly seeded with input text.&lt;/p&gt;
&lt;p&gt;It accomplishes this by splitting …&lt;/p&gt;</summary><content type="html">&lt;p&gt;For fun, I've recently created my own &lt;a href="https://en.wikipedia.org/wiki/Markov_chain"&gt;Markov&lt;/a&gt; text generator.&lt;/p&gt;
&lt;h2&gt;Explanation&lt;/h2&gt;
&lt;p&gt;A Markov text generator takes a piece of text as input and outputs new text that is seemingly random. It may even make syntactical and/or semantic sense if properly seeded with input text.&lt;/p&gt;
&lt;p&gt;It accomplishes this by splitting the inputted text into tokens based on some separation character. This can result in individual characters or sequences of characters (recognized as words if the separation character is a space).&lt;/p&gt;
&lt;p&gt;It then creates a chain of these tokens based on the order of their appearance in the text. The length of this chain is chosen by the generator's user. It then adds the token appearing immediately after this chain of tokens to a list that is associated with that particular chain of tokens. Repeating this process for all inputted text creates the Markov chain.&lt;/p&gt;
&lt;p&gt;To generate the random text, the program chooses a chain of tokens as the starting point of the output text.&lt;/p&gt;
&lt;p&gt;It then chooses a random token from the list of tokens associated with the chain and add that token to the output text.&lt;/p&gt;
&lt;p&gt;After, it extends the chain of tokens to include this next token while removing the first token from the chain. This creates a new chain of tokens to then choose another random token from the list associated with the chain.&lt;/p&gt;
&lt;p&gt;After some determined stopping point, the generator ceases to create more text.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;So, let's say I have the input text "I like bananas and apples and oranges."&lt;/p&gt;
&lt;p&gt;Let's say I want to split this text by spaces, isolating the words and character(s) that come immediately after the word.&lt;/p&gt;
&lt;p&gt;I also want the chain's length (chain-size from 'Features' above) to be 1.&lt;/p&gt;
&lt;p&gt;So the following chain would be created with its associated next tokens:&lt;/p&gt;
&lt;p&gt;chain of tokens: list of tokens coming after the chain in the text&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;quot;I&amp;quot;: [&amp;quot;like&amp;quot;]
&amp;quot;like&amp;quot;: [&amp;quot;bananas&amp;quot;]
&amp;quot;bananas&amp;quot;: [&amp;quot;and&amp;quot;]
&amp;quot;and&amp;quot;: [&amp;quot;apples&amp;quot;, &amp;quot;oranges.&amp;quot;]
&amp;quot;apples&amp;quot;: [&amp;quot;and&amp;quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As you can see, the chain "and" has two different words it sees after it in the sentence.&lt;/p&gt;
&lt;p&gt;So, there's a 50% probability that "apples" or "oranges." will come after the word "and" according to this sentence. However, with the other words there is a 100% probability that the next word will be the only one contained in their list.&lt;/p&gt;
&lt;p&gt;You can imagine how more text and chains with lengths greater than 1 will lead to more random and original sentences.&lt;/p&gt;
&lt;p&gt;Suppose we don't have any separation. Doing this by character makes it more interesting. It will generate more random words, some misspelled because of the random aspects of chain, and will make less semantic sense than creating chains via words (characters separated by a space).&lt;/p&gt;
&lt;p&gt;Here is a link to it: &lt;a href="https://github.com/evandowning/markov-text-generator"&gt;https://github.com/evandowning/markov-text-generator&lt;/a&gt;&lt;/p&gt;</content><category term="coding-fun"/><category term="markov"/></entry><entry><title>Suggested Reads</title><link href="https://www.evandowning.com/suggested-reads.html" rel="alternate"/><published>2015-01-01T00:00:00-05:00</published><updated>2024-12-09T00:00:00-05:00</updated><author><name>Evan Downing</name></author><id>tag:www.evandowning.com,2015-01-01:/suggested-reads.html</id><summary type="html">&lt;h2&gt;Read these first&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dl.acm.org/doi/pdf/10.1145/1273445.1273458"&gt;How to read a paper (2007)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.usenix.org/conferences/author-resources/how-and-how-not-write-good-systems-paper"&gt;How (and how not) to write a good systems paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syedirfanhyder.blogspot.com/2017/08/what-is-problem-statement-and-its-role-in-phd-research.html"&gt;Writing a Problem Statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syedirfanhyder.blogspot.com/2017/08/what-is-thesis-statement-how-to-write.html"&gt;Writing a Thesis Statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/document/d/1KCSXYmInnBrOnFw5y3kQdNluLTYKt-jF1psyviNAeag/"&gt;Research as a Stochastic Decision Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Precision_and_recall"&gt;Precision and Recall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_fallacies"&gt;Fallacies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Undecidable_problem"&gt;Undecidability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Papers&lt;/h2&gt;
&lt;p&gt;You can find all of these on &lt;a href="https://scholar.google.com/"&gt;Google Scholar&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Computer security …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h2&gt;Read these first&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dl.acm.org/doi/pdf/10.1145/1273445.1273458"&gt;How to read a paper (2007)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.usenix.org/conferences/author-resources/how-and-how-not-write-good-systems-paper"&gt;How (and how not) to write a good systems paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syedirfanhyder.blogspot.com/2017/08/what-is-problem-statement-and-its-role-in-phd-research.html"&gt;Writing a Problem Statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syedirfanhyder.blogspot.com/2017/08/what-is-thesis-statement-how-to-write.html"&gt;Writing a Thesis Statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/document/d/1KCSXYmInnBrOnFw5y3kQdNluLTYKt-jF1psyviNAeag/"&gt;Research as a Stochastic Decision Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Precision_and_recall"&gt;Precision and Recall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_fallacies"&gt;Fallacies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Undecidable_problem"&gt;Undecidability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Papers&lt;/h2&gt;
&lt;p&gt;You can find all of these on &lt;a href="https://scholar.google.com/"&gt;Google Scholar&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Computer security threat monitoring and surveillance (1980)&lt;/li&gt;
&lt;li&gt;Requirements and model for IDES - a real-time intrusion detection expert system (1985)&lt;/li&gt;
&lt;li&gt;An intrusion-detection model (1987) - Denning&lt;/li&gt;
&lt;li&gt;The SRI IDES statistical anomaly detector (1991) - Javitz and Valdes&lt;/li&gt;
&lt;li&gt;USTAT: A real-time intrusion detection system for UNIX (1993)&lt;/li&gt;
&lt;li&gt;Self-nonself discrimination in a computer (1994)&lt;/li&gt;
&lt;li&gt;Next-generation intrusion detection expert system (NIDES): A summary (1995)&lt;/li&gt;
&lt;li&gt;A sense of self for unix processes (1996) - Forrest&lt;/li&gt;
&lt;li&gt;Role-based access control models (1996) - Sandhu&lt;/li&gt;
&lt;li&gt;The base-rate fallacy and its implications for the difficulty of intrusion detection (1999) - Axelsson&lt;/li&gt;
&lt;li&gt;Bro: a system for detecting network intruders in real-time (1999) - Paxson&lt;/li&gt;
&lt;li&gt;Intrusion detection via static analysis (2001) - Wagner and Dean&lt;/li&gt;
&lt;li&gt;How to Own the Internet in Your Spare Time (2002) - Staniford&lt;/li&gt;
&lt;li&gt;Mimicry attacks on host-based intrusion detection systems (2002)&lt;/li&gt;
&lt;li&gt;"Why 6?" Defining the operational limits of stide, an anomaly-based intrusion detector (2002)&lt;/li&gt;
&lt;li&gt;Optical time-domain eavesdropping risks of CRT displays (2002)&lt;/li&gt;
&lt;li&gt;Formalizing sensitivity in static analysis for intrusion detection (2004) - Feng&lt;/li&gt;
&lt;li&gt;Polygraph: Automatically Generating Signatures for Polymorphic Worms (2005)&lt;/li&gt;
&lt;li&gt;Semantics-aware malware detection (2005)&lt;/li&gt;
&lt;li&gt;Automating mimicry attacks using static binary analysis (2005)&lt;/li&gt;
&lt;li&gt;Modeling Botnet Propagation Using Time Zones (2006) - Dagon&lt;/li&gt;
&lt;li&gt;Polymorphic Blending Attacks (2006) - Fogla&lt;/li&gt;
&lt;li&gt;Misleading worm signature generators using deliberate noise injection (2006)&lt;/li&gt;
&lt;li&gt;Paragraph: Thwarting signature learning by training maliciously (2006)&lt;/li&gt;
&lt;li&gt;Allergy attack against automatic signature generation (2006)&lt;/li&gt;
&lt;li&gt;A taxonomy of botnet structures (2007)&lt;/li&gt;
&lt;li&gt;Exploring multiple execution paths for malware analysis (2007)&lt;/li&gt;
&lt;li&gt;Limits of static analysis for malware detection (2007)&lt;/li&gt;
&lt;li&gt;BotMiner: Clustering Analysis of Network Traffic for Protocol-and Structure-Independent Botnet Detection (2008) - Gu&lt;/li&gt;
&lt;li&gt;All your iframes point to us (2008)&lt;/li&gt;
&lt;li&gt;Increased DNS Forgery Resistance Through 0x20-Bit Encoding (2008)&lt;/li&gt;
&lt;li&gt;Impeding Malware Analysis Using Conditional Code Obfuscation (2008)&lt;/li&gt;
&lt;li&gt;BitBlaze: A new approach to computer security via binary analysis (2008)&lt;/li&gt;
&lt;li&gt;Ether: malware analysis via hardware virtualization extensions (2008)&lt;/li&gt;
&lt;li&gt;Active botnet probing to identify obscure command and control channels (2009)&lt;/li&gt;
&lt;li&gt;Effective and Efficient Malware Detection at the End Host (2009)&lt;/li&gt;
&lt;li&gt;Emulating emulation-resistant malware (2009)&lt;/li&gt;
&lt;li&gt;Scalable, Behavior-Based Malware Clustering (2009)&lt;/li&gt;
&lt;li&gt;Outside the Closed World: On Using Machine Learning for Network Intrusion Detection (2010)&lt;/li&gt;
&lt;li&gt;Synthesizing near-optimal malware specifications from suspicious behaviors (2010)&lt;/li&gt;
&lt;li&gt;Efficient Detection of Split Personalities in Malware (2010)&lt;/li&gt;
&lt;li&gt;Identifying dormant functionality in malware programs (2010)&lt;/li&gt;
&lt;li&gt;Bitshred: Fast, scalable malware triage (2010)&lt;/li&gt;
&lt;li&gt;Behavioral Clustering of HTTP-Based Malware and Signature Generation Using Malicious Network Traces (2010)&lt;/li&gt;
&lt;li&gt;Detecting environment-sensitive malware (2011)&lt;/li&gt;
&lt;li&gt;Outside the Closed World: On Using Machine Learning for Network Intrusion Detection (2010)&lt;/li&gt;
&lt;li&gt;Detecting Malware Domains at the Upper DNS Hierarchy (2011)&lt;/li&gt;
&lt;li&gt;GQ: Practical containment for measuring modern malware systems (2011)&lt;/li&gt;
&lt;li&gt;The power of procrastination: detection and mitigation of execution-stalling malicious code (2011)&lt;/li&gt;
&lt;li&gt;Impeding Automated Malware Analysis with Environment-sensitive Malware (2012)&lt;/li&gt;
&lt;li&gt;From Throw-Away Traffic to Bots: Detecting the Rise of DGA-Based Malware (2012)&lt;/li&gt;
&lt;li&gt;Scalable fine-grained behavioral clustering of HTTP-based malware (2013)&lt;/li&gt;
&lt;li&gt;A11y Attacks: Exploiting Accessibility in Operating Systems (2014)&lt;/li&gt;
&lt;li&gt;Gyrus: A framework for user-intent monitoring of text-based networked applications (2014)&lt;/li&gt;
&lt;li&gt;Barecloud: bare-metal analysis-based evasive malware detection (2014)&lt;/li&gt;
&lt;li&gt;Guilt by association: large scale malware detection by mining file-relation graphs (2014)&lt;/li&gt;
&lt;li&gt;Needles in a Haystack: Mining Information from Public Dynamic Analysis Sandboxes for Malware Intelligence (2015)&lt;/li&gt;
&lt;li&gt;WebWitness: Investigating, Categorizing, and Mitigating Malware Download Paths (2015)&lt;/li&gt;
&lt;li&gt;Towards Making Systems Forget with Machine Unlearning (2015)&lt;/li&gt;
&lt;li&gt;Automatically Evading Classifiers: A Case Study on PDF Malware Classifiers (2016)&lt;/li&gt;
&lt;li&gt;Helping johnny to analyze malware: A usability-optimized decompiler and malware analysis user study (2016)&lt;/li&gt;
&lt;li&gt;Towards evaluating the robustness of neural networks (2017)&lt;/li&gt;
&lt;li&gt;Feature Squeezing Mitigates and Detects Carlini/Wagner Adversarial Examples (2017)&lt;/li&gt;
&lt;li&gt;Spotless Sandboxes: Evading Malware Analysis Systems using Wear-and-Tear Artifacts (2017)&lt;/li&gt;
&lt;li&gt;The Battle for New York: A Case Study of Applied Digital Threat Modeling at the Enterprise Level (2018)&lt;/li&gt;
&lt;li&gt;Enforcing unique code target property for control-flow integrity (2018)&lt;/li&gt;
&lt;li&gt;TESSERACT: Eliminating experimental bias in malware classification across space and time (2019)&lt;/li&gt;
&lt;li&gt;When Malware is Packin' Heat; Limits of Machine Learning Classifiers Based on Static Analysis Features (2020)&lt;/li&gt;
&lt;li&gt;An Observational Investigation of Reverse Engineers’ Processes (2020)&lt;/li&gt;
&lt;li&gt;When Malware Changed Its Mind: An Empirical Study of Variable Program Behaviors in the Real World (2021)&lt;/li&gt;
&lt;li&gt;Arbitrar: User-guided api misuse detection (2021)&lt;/li&gt;
&lt;li&gt;An Inside Look into the Practice of Malware Analysis (2021)&lt;/li&gt;
&lt;li&gt;BODMAS: An Open Dataset for Learning based Temporal Analysis of PE Malware (2021)&lt;/li&gt;
&lt;li&gt;CADE: Detecting and Explaining Concept Drift Samples for Security Applications (2021)&lt;/li&gt;
&lt;li&gt;Proof-of-Learning: Definitions and Practice (2021)&lt;/li&gt;
&lt;li&gt;RE-Mind: a First Look Inside the Mind of a Reverse Engineer (2022)&lt;/li&gt;
&lt;li&gt;DEEPDI: Learning a Relational Graph Convolutional Network Model on Instructions for Fast and Accurate Disassembly (2022)&lt;/li&gt;
&lt;li&gt;Transcending transcend: Revisiting malware classification in the presence of concept drift (2022)&lt;/li&gt;
&lt;li&gt;99% False Positives: A Qualitative Study of SOC Analysts' Perspectives on Security Alarms (2022)&lt;/li&gt;
&lt;li&gt;Dos and Don'ts of Machine Learning in Computer Security (2022)&lt;/li&gt;
&lt;li&gt;DnD: A Cross-Architecture Deep Neural Network Decompiler (2022)&lt;/li&gt;
&lt;li&gt;Ground Truth for Binary Disassembly is Not Easy (2022)&lt;/li&gt;
&lt;li&gt;Everybody’s Got ML, Tell Me What Else You Have: Practitioners' Perception of ML-Based Security Tools and Explanations (2023)&lt;/li&gt;
&lt;li&gt;Humans vs. Machines in Malware Classification (2023)&lt;/li&gt;
&lt;li&gt;No One Drinks From the Firehose: How Organizations Filter and Prioritize Vulnerability Information (2023)&lt;/li&gt;
&lt;li&gt;The Attacker Moves Second: Stronger Adaptive Attacks Bypass Defenses Against LLM Jailbreaks and Prompt Injections (2025)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Recommended Conferences&lt;/h2&gt;
&lt;h3&gt;Academic conferences&lt;/h3&gt;
&lt;p&gt;Tier 1: &lt;a href="https://people.engr.tamu.edu/guofei/sec_conf_stat.htm"&gt;source1&lt;/a&gt; &amp;amp; &lt;a href="https://portal.core.edu.au/conf-ranks/?search=security&amp;amp;by=all&amp;amp;source=all&amp;amp;sort=arank&amp;amp;page=1"&gt;source2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S&amp;amp;P: &lt;a href="https://www.ieee-security.org/TC/SP-Index.html"&gt;https://www.ieee-security.org/TC/SP-Index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;USENIX Security Symposium: &lt;a href="https://www.usenix.org/conferences"&gt;https://www.usenix.org/conferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CCS: &lt;a href="https://www.sigsac.org/ccs.html"&gt;https://www.sigsac.org/ccs.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NDSS: &lt;a href="https://www.ndss-symposium.org/"&gt;https://www.ndss-symposium.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Industry conferences&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://events.linuxfoundation.org/open-source-summit-north-america/"&gt;Open Source Summit&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://events.linuxfoundation.org/openssf-community-day-north-america/"&gt;OpenSSF Community Day&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://us.pycon.org/"&gt;PyCon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Talks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5VnDaHBi8dM"&gt;Binky Pointer Fun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ajGX7odA87k"&gt;James Mickens: Why Do Keynote Speakers Keep Suggesting That Improving Security Is Possible?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=4zZZHx1YGzk"&gt;Wenke Lee: Machine Learning and Security: The Good, The Bad, and The Ugly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blog Posts&lt;/h2&gt;
&lt;h3&gt;Machine Learning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://machinelearningmastery.com/difference-test-validation-datasets/"&gt;What is the Difference Between Test and Validation Datasets?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://machinelearningmastery.com/k-fold-cross-validation/"&gt;A Gentle Introduction to k-fold Cross-Validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://machinelearningmastery.com/how-to-configure-k-fold-cross-validation/"&gt;How to Configure k-Fold Cross-Validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicholas.carlini.com/writing/2024/how-i-use-ai.html"&gt;How I Use AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Machine Learning for Security&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/06/20/machine-learning-eset-road-augur/"&gt;Machine learning by ESET: The road to Augur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/04/11/fighting-post-truth-reality-cybersecurity/"&gt;Fighting post-truth with reality in cybersecurity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/04/12/dont-buy-elixir-youth-machine-learning-not-magic/"&gt;Machine learning is not magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/04/18/pr-reality-collide-truth-machine-learning-cybersecurity/"&gt;When PR and reality collide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/04/25/machine-learning-math-cant-trump-smart-attackers/"&gt;Machine learning and math can’t trump smart attackers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/05/02/single-protective-technology-means-single-point-failure/"&gt;A single protective technology means a single point of failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.welivesecurity.com/2017/05/09/false-positives-can-costly-malware-infection/"&gt;False positives can be more costly than a malware infection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software Supply Chain&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.softwaremaxims.com/blog/not-a-supplier"&gt;I am not a supplier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;RSS feeds&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nesbitt.io/feed.xml"&gt;https://nesbitt.io/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://carteryagemann.com/feeds/all.atom.xml"&gt;https://carteryagemann.com/feeds/all.atom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dustingram.com/atom.xml"&gt;https://dustingram.com/atom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.yossarian.net/feed.xml"&gt;https://blog.yossarian.net/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://exploit.in/feed/"&gt;https://exploit.in/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.internetgovernance.org/feed/"&gt;https://www.internetgovernance.org/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mihai.page/rss.xml"&gt;https://mihai.page/rss.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.miketheman.net/feed/"&gt;https://www.miketheman.net/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicholas.carlini.com/writing/feed.xml"&gt;https://nicholas.carlini.com/writing/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openssf.org/feed/"&gt;https://openssf.org/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projectzero.google/feed.xml"&gt;https://projectzero.google/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reverse.put.as/index.xml"&gt;https://reverse.put.as/index.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://some-natalie.dev/feed.xml"&gt;https://some-natalie.dev/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/feed/"&gt;https://devblogs.microsoft.com/oldnewthing/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.trailofbits.com/index.xml"&gt;https://blog.trailofbits.com/index.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.virustotal.com/feeds/posts/default"&gt;https://blog.virustotal.com/feeds/posts/default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://infosec.exchange/@xbow.rss"&gt;https://infosec.exchange/@xbow.rss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Funding Opportunities&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sam.gov/"&gt;https://sam.gov/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.darpa.mil/work-with-us/opportunities"&gt;https://www.darpa.mil/work-with-us/opportunities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arpa-h.gov/explore-funding/open-funding-opportunities"&gt;https://arpa-h.gov/explore-funding/open-funding-opportunities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.darpa.mil/events"&gt;https://www.darpa.mil/events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.defensesbirsttr.mil/SBIR-STTR/Opportunities/"&gt;https://www.defensesbirsttr.mil/SBIR-STTR/Opportunities/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.navysbir.com/"&gt;https://www.navysbir.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nsf.gov/funding/opportunities"&gt;https://www.nsf.gov/funding/opportunities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Books&lt;/h2&gt;
&lt;h3&gt;Computer Science&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Introduction to the Theory of Computation (Sipser)&lt;/li&gt;
&lt;li&gt;Compilers: Principles, Techniques, and Tools (Aho, Lam, Sethi, Ullman)&lt;/li&gt;
&lt;li&gt;Computer Networking (Kurose and Ross)&lt;/li&gt;
&lt;li&gt;Introduction to Modern Cryptography (Katz and Lindell)&lt;/li&gt;
&lt;li&gt;Qualitative Analysis: Constructing Grounded Theory (Charmaz)&lt;/li&gt;
&lt;li&gt;Machine Learning (Mitchell)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software Development&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pro Git (Chacon and Straub)&lt;/li&gt;
&lt;li&gt;Fluent Python (Ramalho)&lt;/li&gt;
&lt;li&gt;Deep Learning with Python (Chollet)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cybersecurity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;From Day Zero to Zero Day (Lim)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phrack.org/"&gt;Phrack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Shellcoder's Handbook: Discovering and Exploiting Security Holes (Anley, Heasman, Linder, Richarte)&lt;/li&gt;
&lt;li&gt;The Hacker Playbook 3: Practical Guide to Penetration Testing (Kim)&lt;/li&gt;
&lt;li&gt;Linkers &amp;amp; Loaders (Levine)&lt;/li&gt;
&lt;li&gt;Rootkits (Butler and Hoglund)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appsec.guide/"&gt;Trail of Bits Testing Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Practical Malware Analysis (Sikorski and Honig)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Other&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Style: Lessons in Clarity and Grace (Colomb)&lt;/li&gt;
&lt;li&gt;The Intelligent Asset Allocator (Bernstein)&lt;/li&gt;
&lt;li&gt;The Lean Startup (Eric Ries)&lt;/li&gt;
&lt;li&gt;How to Win Friends and Influence People (Carnegie)&lt;/li&gt;
&lt;li&gt;Mini Farming: Self-Sufficiency on 1/4 Acre (Brett Markham)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/></entry></feed>