 In prior videos, we talked about A-Leap, I-Leap, a little bit about W-Leap. We want step by step on how to write a module. But one thing I left out of that video is a little tip on how to test your modules before you implement them into A-Leap, I-Leap, or W-Leap. So here I have an iPhone image. This was from the Celebrite CTF and it was an iPhone X. If I look into that, we have a couple file systems and it is the file system level dump. One file that I'm interested in parsing out is the user words control. So if I do find.grep-i, user words, then I can find where that file actually is. If I do cat and I give this file name, paste that in there, and I can see that this is a BP list and I need to use something like BP Lister to actually parse this out. If I'm writing a Python module and I want to parse this particular file out, then I need to use something that understands BP list formats. I already have a fork of the I-Leap repository, so I'm going to go ahead and clone that down because if I am writing a module, I'm going to be uploading it to my individual repository. So get clone and then paste in that repository. So now I have the I-Leap repository and then I just want to open up code and see what code is available in here. So if I go into scripts, artifacts, I can already see, for example, I know that the file that I'm looking at has to do with keyboards. So I might be looking for something called keyboard languages. So keyboard app usage and keyboard lexicon. This doesn't have anything to do with the keyboard languages that are installed. So if that's the feature that I want to add, then I already have an idea of what I'm going to call my module. It's probably going to be keyboard languages because that's the artifact that I'm actually parsing out. So I already know what my file name is going to be. But what else I can do is start to go through here and look at anything that also parses out BP lists. So I found appgrouplisting.py and it imports BIP list. Now I really want to try to use that same library and that's because if all of these modules use the same libraries kind of as a standard, then the user doesn't have to install a bunch of extra things every time. So we can kind of rely on BIP list to it be installed. Try to use any libraries that are already listed. So just have a look through them. Say, okay, I need to parse out BP lists. Is anyone doing that already? So the library that I would probably use is BIP list. I'm going to go ahead and copy that. And what my trick is essentially is not create the module in iLeap yet. First make a mockup in just a normal Python script. So we're going to do is just use nano and then call this test.py. And then the first thing I'm going to import is BIP list, because that's the library that iLeap was using. And then I just have P list equals read P list. And then I have the full path to the file that I'm just testing. And then I just print P list. And we should be able to print that object out in a pretty sort of way. Just run Python three test.py. Okay. So just like the example I'm going to do from BIP list import star and then P list equals read P list. And then the full path to the P list that I'm analyzing. And then just print P list. And that should give us at least a basic example. I'm going to run Python three test.py. And then you can see that we get out. It's not exactly pretty printed, but we do get out a parsed P list. So it's not just the binary format. Okay. And in here I can see my EN US Emoji HEIL. If I was already developing my module in iLeap, then I would have to run iLeap every single time. But now that I'm just using this test.py, I can run it and then go back into test.py, make a few changes, make sure I'm parsing out everything, and then run it again. And it's much easier to run without having to worry about the iLeap framework. So get your parser working in just a test script first, pull out your test data, make sure you can parse all of that test data. And then once everything is working, you can basically just copy everything that you have in your Python script, copy that out and then go back over to your iLeap code. And then you can create your function and just paste everything directly in there. Now the only thing you'll have to do in iLeap is set up your reporting functions. My trick for developing a module very quickly, instead of running it through iLeap every single time, develop your parser in Python first and make sure that everything is outputting correctly. Once your parser is done, then copy it into a new module into iLeap, set up your reporting, and you should just be able to run it one time and be good to go. So doing it this way will save you a lot of time in running iLeap because you can just run a quick test script first and then make sure everything's working. This is one trick whenever you're developing any prototype. Don't worry about the framework unless the framework is providing some sort of support for you. In this case, iLeap just calls our parser script. So write your parser script separately first and then bring in iLeap next. And that kind of workflow will save you a lot of time and also make it much easier to troubleshoot if something goes wrong. So I hope that's useful for writing your scripts for any of the Leap packages. Thank you very much.