Hey everybody, this is Brian, and welcome to the 104th tutorial with cute C++ and GUI programming. It's been a very, very extremely long time since I've done a video to the tune of almost I think six months, so please bear with me as I get used to doing this again. You might hear me moving my microphone around. For this tutorial, what we're going to do is mix cute with native. For this, we're going to make a keylogger in Windows. If you don't know what a keylogger is, it's when you press a key on the keyboard and this program will listen to the keystroke and then do whatever you want with it, dump it to a text file, whatever. In order to do that, you're going to need to download the Microsoft Windows SDK for Windows, whatever you're using, I'm using Windows 7. It's kind of funny. I've had a lot of people go, well, I'm not going to watch a video from somebody that uses Internet Explorer. Actually, I use Linux with Firefox. The only time I use Windows is when I'm recording these videos because I use, tada, CamStudio. The problem is I can't get CamStudio to work reliably in Linux on wine and I can't find a suitable replacement. I've had a lot of people give me feedback, but none of them work. They just, I hate to say it, they don't work. The reason why you're going to need the SDK is you need access to the headers and libraries that Windows offers. If you're a non-Windows user, I'm sorry, this tutorial will not work for you. All right. I'm using Qt Creator 214. I'm fairly certain that's recent. If not, just bear in mind there may be some compatibility issues. We're going to go File New. I'm going to make a new console application. I'm going to call this Keylogger. Now calling a Keylogger might not be the best thing in the world if you have a virus scanning program because it might just see that and get all mad. We are not writing a virus. I have to put that disclaimer out there right now. We are writing what is called a Windows hook. You'll see very soon what I mean by that. So I'm just going to hide this. And now we've got some screen real estate here. We've got our basic console program. Let's just give it the old one, two, let it compile and run so we get that garbage out of the way. And there's our just basic program. Now the premise of this is we're going to make it output on the screen in this little DOS window here. And we're going to do that when we are, when we bring notepad, so like if I type in notepad, you'll see it in our window over here. Let me reiterate that. When we type in another application, we will get the output in our application. That is called a Windows hook. The way Windows works is whenever you do anything, it sends a message to all Windows. And you can subscribe to those messages by a hook, saying I want to be notified every time there's a keystroke, a mouse movement, a registry access, et cetera, et cetera. So that's what we're going to be doing today, boys and girls. Let me kill that. No, I don't want to save that rubbish. All right, now onward and upward. As I said, it has been a long, long time. So bear with me here. First thing we're going to do is get our includes out of the way. We're going to go include, queue to bug, and let's say here include, I'm going off my notes here. I actually wrote this program and tested it earlier. From your guys' feedback, you have told me this is the best way. You don't like it when I just give you a program. So I've actually written and tested this thing and now we're going to implement it. And we're going to do include the standard IO stream because we are going to be working with some just raw C++ here. And we want to, and this is why you need the SDK, Windows, Windows.h. If you've ever done any programming with Microsoft, you know Windows.h inside now. Then we want to add a pragma comment. This is very important here. This is just saying we're using this library user32.dll, I'm sorry, .lib. And this should be part of the SDK. If you've ever done any work with Windows before, you know what I'm talking about. Now what we need to do at this point is save our work and give it a good build. If it flips out and dies, that means you are missing something most likely the SDK. We got a successful build. We can run our application. That means all of our includes all the paths and everything are in the correct spot. Now I'm not going to cover that because he's setting up environmental variables and et cetera et cetera can get kind of tedious. If you don't know how to do any of that, chances are you need to open Google and start typing because it's not easy. It's not hard. It's just not what we're going to cover today. Now we need to make a global variable called hhook. And this is just our hook. We're going to need a Windows hook. We're going to be using namespace. We're going to use the standard namespace. Now let's go into the guts of our little application here. Let me scroll down my notes. As you see, we've got just a standard Qt application. We've got our main. We've got our QCore application and then we're just exacting the application. So it's just running. Exact is just an application loop. That's why when you run your application, let me build it and run here, it doesn't just open and close immediately like a traditional DOS-based application because we're in a loop. This is one of Qt's message loops, or I should say application loops. So what we need to do now is actually set up our Windows hook. So we're going to say hhook, let me find it here, equal. And this is where Windows programming becomes just mind-numbingly infuriating. We use what's called an API or application programming interface. We're working with the raw Windows application or API. So we want setWindowsHook EX and that, you guessed it, is within Windows.h. Now what this does is it allows us to set a Windows hook. Now we need to tell it what type of hook. So we need to wh keyboard. So we're saying we're watching the keyboard. And now we need to give it the address of our proc or our Windows hook. And we're just going to call this my low-level keyboard and we want our pointer and if you want to know what these values are just go out to the Windows site that explains all this. Just Google Microsoft setWindowsHook EX and it'll show you. I wish Microsoft's documentation was better but it's actually very, very horrible. We're going to say if, hhook. And we're just testing here to say if it's null then, well, we snapped food something. We didn't get our hook. And we're just going to do our Qtabug. So we know what's going on out in the Qt world here. Hook failed. Now we would know our hook failed. So if we examine this, what we're doing here is we've got our return value, hhook, which is a hook, which is just a type def, Microsoft loves type defs. And if you hover over that, yep, it just says it's a pointer to, et cetera, et cetera. And we're calling setWindowsHook, we're saying we want to do a Windows keyboard. My low-level keyboard proc. What is that? Well, that is our callback. So we have to actually make a function with that name. So lrresults, oops, callback, and this is where it gets kind of snappy. I say snappy instead of curse words because, well, you know, don't know how old people are watching this. You've got to understand what is going on with this call. And the problem with the setWindowsHook ex is that it returns different values based on the types of things you're monitoring. So we'll do wparam and lparam. And once again, if you have no idea what these are, you'll have to go out and Google it. Actually, let me pause this and Google it real quick. All right, going out to Google, we just type in setWindowsHook ex, and you can see in the MSDN, our Microsoft Developer Network, installs an application to find hook procedure into a hook chain. Let's just go out here and take a look at this real quick here. And this is our structure here, actually not our structure, the API we're calling setWindowsHook ex, and you can see how we've got an ID hook and blah, blah, blah. Don't get hung up on these names. This really throws people off when they start on native programming, especially Microsoft, because some of these names make no sense whatsoever. But they give you details about what these are. Like the ID hook is an int type, what type, and then it says the types. These are all the hooks that you can install. You can do this shell, system manager, mouse, keyboard, et cetera, et cetera. And then you've got your hinstans, dword, dah, dah, dah, dah.  Really, you gain some respect for what is going on under the hood just when you hit a key on the keyboard. There's so much going on under there. So take a moment, go out and read some of that. Get familiar with it. There's tons and tons and tons of examples out on the internet. Now before we go any further, what I want to do here is just give it a good build. Make sure we got everything up to snuff, because I'd hate to get, let's see, must return a value. Well, shoot. That's right. If you read the documentation, which admittedly I have not read it in a while, you need to do what's called next hook, because it'll actually stop and wait for you to say, OK, I'm done with it. Dah, dah, dah, dah, dah, dah. Sorry, I'm humming to myself. I'm usually listening to music when I write code for my personal amusement. So I'm used to just kind of humming along, being a happy little programmer. All right. So now what we're doing, and let me close this humongous thing, is we are saying, install the hook. If h hook, our return value equal null, then we failed to get the hook.  So every time we hit a key on the keyboard, it'll call this hook. Now we have to return a value, an L result, using another API call, call next, I misspelled that, that would have been horribly bad, call next hook ex. What that does is there is a queue of items, and this will just call the next one. Returns nothing if there's nothing there. Let's give this a good build. All right. So just for measures here, we'll go key, queue to bug, and we're just going to say, key pressed. Told you it's been a while since I've done a video, bear with me. This is probably going to be like a three hour long video just because I keep screwing things up. So let's give this a good run. Hook failed. What did I do wrong here? You see when I hit the key on the keyboard, nothing happens. Let me pause this and review because sometimes figuring this out may take a while. So let me figure out what I did wrong here. OK, I see the problem. I'm calling WH keyboard, and we actually need drumroll, LL, a different filter. This is why working with Microsoft or all APIs is just maddening. Once you get into it, it makes sense. But if you're just new to it, you're like, what in the world does this mean? So let's give this a good build and run, and this thing should work now. Key pressed, key pressed. Now that looks good and dandy. Let me actually fire up notepad here. Yeah, as I'm typing notepad, you can see. Now we've actually got notepad in focus here. When I hit a key, you should see down here, key pressed. See? Works. So we have our Windows Hook installed. Now what we want to do is actually get the raw key. Figure out what key did I just type. Let's close our little application here, and I'm just going to leave this open. And this is where, yep, you guessed it, that code is going to get messy. Microsoft, of course, makes nothing easy. We have to work with quality structure.  Well, we have to start working with those. So what we need to do is get the key information. And we do that with the keyboard, DOL, Hook struct. And we're just going to call it C key. And the pointer of the Lparam. And we need to cast that. And I know there's a better way of doing this, but just for quickness. Well, doesn't that look special? All right. So what we're doing is we're getting a pointer to the keyboard Hook struct out of the Lparam argument. When we do a Windows Hook, it has these arguments, Wparam and Lparam. Wparam is like the Windows message, whether it's key up, key down, et cetera, et cetera. Lparam is the actual key information. Let me actually copy and paste this from my notes here. So Wparam is the message. You're going to get a message when there's a key up or a key down. And when there's a system key down or a system key up, where Lparam is the actual key that was pressed. So when you see this key pressed, we're actually getting two of these. One down, one up. Now, what we need to do is make a buffer. So we're going to say W care, T buffer. And let's just do five. What do we need that for? Well, we're going to grab the key information. But we're going to get a little snazzy. So if we hit the tab key instead of character nine, we want to actually see TAB, the word tab. Now, we're going to have to grab the keyboard state. And we use another type called byte. I kind of love Microsoft. You know, I almost wonder sometimes if there's like a big whiteboard in a break room at Microsoft somewhere that has all the different type defs that they use because some of these are just, I think it's like every programmer they hire has to make their own type def. So there's like a million type defs going on in Windows. But I'm not going to argue with them. They obviously know what they're doing. They're a multi-billion dollar company. And we want to get keyboard state. I cannot spell today. Now, what get keyboard state does? Make sure I actually spelled that right. All right, what get keyboard state does is it actually gets the state for all of the keys on your keyboard. Yes. So what we're going to do here, let's review. I know I'm typing in a lot of stuff that looks like ancient Egyptian algebra. We've got our low level keyboard hook. It's a keyboard hook because we're saying WH keyboard LL. When our Windows hook is triggered, Windows will call our function. Notice that's a callback. And it'll give us code. It'll give us what type of callback it is and the actual information in the L-param. And then we have to get that structure out of memory. Now we have to have a buffer because we're going to fill that buffer up with information. And then we're going to get the keyboard state of every key on the keyboard. Why are we doing that? Because we want to know the different states of the key, whether they are like the shift key, the alt key, because you may do like, you know, shift A for capital A. So you want to know the actual state of the keyboard. So to do that, we need to make yet another function. Avoid, update, key state. I have been gaming, so I cannot type. I honestly think that if you play games, you can't type because you're used to using short hands. If you're wondering what I've been playing while I'm sitting here typing all this gibberish out, I've been playing Diablo 3 and Starcraft 2. I have not been playing nearly as much as I wish I could. Actually, right after I make this video, I think I'm going to log into Battle.net and start playing. So we'll take our key state here. We'll do our key code, right? And then we are going to say, get key state for the key code. So what we're doing essentially is we have our keyboard state. We have an array, 256 items of bytes. And we're going to take that and say, get the item at key code, and then update it by using the get key state. Pretty simple, huh? Now, why are we doing that? Well, the answer is both complex and simple. We're doing it because we have to get the keyboard state of all the keys on the keyboard so that we know whether, like I said, Shift-Ctrl-Alt are pressed.  It's kind of flaky the way Microsoft does this. Maybe I'm doing it dead wrong. I don't know, but let's give it a good build at this point. Make sure we don't have any little bugs creeping up into our code here. Got a couple of warnings, nothing to worry about. Everything should be good to this point. Now, let's call update key state. This is going to look a little, what's the word I'm looking for, hokey. So I have to apologize. Keyboard state. And we want the, and Windows are called virtual keys or vk shift. So we want to know the shift key state. And let's just do a little copy and paste magics. You know, do a couple of these. We want to know virtual key capital or the caps lock. We want to know the vk control or the alt key. Is that control or is, no, that's control key. I'm sorry, vk and then the menu key, which is actually the alt key. Very intuitive, isn't it? Thank you, Microsoft. Now we're going to get the keyboard layout. Now, why are we getting the keyboard layout? We're getting the keyboard layout because your keyboard may be laid out different than mine, depending on where region, what country, what language you're actually using. So Microsoft allows for different keyboard layouts just to add to the complexity here. So we'll call keyboard layout equal. You guessed it, keyboard layout. And we're going to get the first layout. That's why we had that zero in there. Now we want to get the name. And we want a L-P-S-Z. We're going to call that L-P-S-Z-S name. Just copy and paste it, make sure I got it right. Yep, okay. And this is going to be, okay, got 100. Now I'm going to copy and paste a little section of code here. This guy right here looks like what we're doing is a little bit of black magic. And you're right, it is. We're doing, I think it's called a bit register shift or a bit shift. No, forgive me, I don't really know. What it is is Microsoft has a specific way of laying all this out in memory. So you have to shift it by a number of items. So you have to shift the flags by 24 and scan code by 16. To understand the difference between a flag and a scan code, go read Microsoft's documentation because you will just, I guarantee you're going to sit back and go, what? What in the world? I don't think they could have engineered this any more difficult. But I'm sure with other operating systems it's just as difficult. Now int I equal, this is where we're going to get the name of the key that we just pressed. Get key, name, text. What we're going to do here is we're going to get, how if I actually spelled the API name right? Get key, name, text. We're going to say, okay, I want to know what the name of that key is. So we're going to take our D, MSG. We're going to cast to L, P, T, S, T, R which is a string type in Windows. We're going to take our name here. And our buffer size of course is 255. Now, that was a lot of typing. What have we accomplished so far? Not a whole lot, but let's review super quick. I want to kind of review as we go. We've got our Windows hook. We've got our key state where it's got an array and it'll update different items. We're getting the keyboard structure. We've got a buffer here. We get the keyboard state for every key in the keyboard. And then we update individual states for the shift, capital, control, and alt.  And then we do a little bit of Microsoft black magic here. And then we get the key name. So if I press the tab key, it'll be character nine. But we wanted to actually say TAB for tab. Pretty snazzy, huh? Now, what we're going to do is try to convert the key info. Because now that we've got all this awesome stuff, we need to actually convert it into something. We want to convert it into Unicode. So we've got our C key and we want our VK code or virtual key code, our C key. And then we want our scan code.  Notice we haven't really done anything with the buffer because this is what the buffer is for. Let me actually scroll over in my notes. This is one long, long line here. And I promise you we will review after we get all this done and working. And we get our keyboard layout. Now, some of you C++ gurus out there go, well, Brian, you could have done most of that in here. Yes, we could have, but I wanted to really break it out so it made sense. What we're doing here is we're just converting that to Unicode and getting a result. Now, because this is Windows, actually I shouldn't say Windows because this is C++, what we want to do here is say at the fourth position or the last position in our buffer, we want to actually add a zero care. This goes back to that chapter you probably skipped in your introduction to C++ book, which is that strings are null terminated, meaning the last part of a string will have a character zero. Without that character zero, it's not a real string. So we need to convert it into an actual string here. And finally, print the output. And we're gonna do a Qtabug and we're just gonna say key, see key code, I'm sorry, vkey. Virtual key code, there we go. And then we need to do a little bit of black magic here. We're gonna do a Q string from UTF16. Let me kind of scroll over here. Now, what are we doing here? Well, we're actually converting it from a UTF16. And we have to cast it again. Use short, pointer to our buffer. I'm sorry, if you can hear my cat, I'm invisible to these cats until I sit down to do something and then suddenly they love me. Now, why are we doing this? Let's back up real quick. Why are we doing this Q string from UTF16, U short, pointer, buffer? Because the buffer is a different type than a Q string. So we actually have to convert that buffer to U short and then cast it from that into a Q string using the from UTF16. Ooh, that's a mouthful. But that's the beauty of Qt is that you can do these sort of things. Now, save us a little bit of issues here. Hold on, kitty needs my attention. Sorry about that. Cat is incredibly like 20 years old, so let's do this. Let's just do a little copy and paste magic here. And we're going to do that LPSC name, that funky variable that we did. All right, that is a lot of typing. It looks to actually get rid of this Qt bug right there. Now, if we've done everything correctly, this should just work. Let's compile and run. All right. Let's actually press key. All right, now you see how you get two. That's because of the key down and the key up. Let's actually grab notepad here. Oh, see, there you go. As you can see, we're typing in notepad, but our program actually has a Windows hook. And we have our key, and there is the actual key number, like the backspace is key eight, whereas like the letter H is 72. And then when I hit the backspace, instead of just doing eight, it actually printed out backspace. So let me hit tab, see, LOL. There you go. Once again, why is it printing out two Ls when I only typed it in once? Well, that's because you got a key down and a key up. So you can very easily filter that out in your code by saying if, you know, WM key down, let me go back in here. You know, if WPram is WM key down, then do this. And that's boys and girls. That is the foundation of a Windows key logger. What would you do with this information? Hmm, well, I know some of you out there probably going, well, I could make a key logger and record what my boyfriend, girlfriend, or my kid, or my uncle, or my neighbor is doing. Yes, you can, but that would be illegal, depending on what country you live in and whether or not you own the computer and all these other sorts of legalities. So this video comes with a disclaimer of I'm not responsible for anything you do with this information, et cetera, et cetera. I'm not gonna show you how to dump this into a text file, but I think if you know cute enough that you're following this video, you can figure that part out on your own. Other things you could do is like a global hotkey. Like, you know, some programs like, you take, what's that program called? Snagit, hit print screen, and instead of just copying the screen to the clipboard, it opens up Snagit and lets you do whatever you want to it. That's, you know, essentially a Windows global hotkey. And there are other ways of registering a hotkey, but I wanted to really show you the raw, gritty, hard way of doing a Windows system hook and what's installed. So let's, let's review. All right, we've got our includes and we have Windows H. If you put Windows H in there and you go to build it and it says, no go, Charlie. Well, that means that you can see in that little tooltip it's Windows, Microsoft SDK, Windows version six, blah, blah, blah, blah. If you don't have the Windows tool, Windows SDK installed, no luck. You're not gonna get that. You can install the Windows SDK separately or you can, like I have Visual Studio installed so that's probably how I got it. We're including IO stream. We're also doing this pragma comment lib meaning we're using the user 32 lib which is part of the SDK without that. Nothing will work. We have a global variable called H hook which if you go down into your main argument, there it is in all its beauty. We're doing a Windows hook EX telling you we want to monitor our keyboard. And this is a low level hook by the way. It doesn't get much closer to the bare metal than this. And then null zero. And then if our hook failed, what are some reasons the hook could fail? Well, as you saw, I botched up our filter. Also certain antiviral programs will not allow a global keyboard hook whatsoever because these things are extremely dangerous. Yes, these work even when the program's not visibly running. You can write a Windows service and have this run in the background snagging key input. It's tricky, but it can be done. Typically Microsoft says you have to do a key logger inside of a DLL. Well, as you can see, we just did a console application and it's running just fine. The keyboard hook uses a callback. Here's our callback. My low-level keyboard proc, probably the longest name in the world. And that has a code, a WPram and an LPram. Once again, go out to the web and look all this information up. You should really, you know, instead of just copying and pasting what I did and using it, you should really learn this insight now if you really wanna use it. We're getting our pointer to our structure. We're making a buffer. That buffer's gonna be filled later. We get the keyboard state for all the keys on the keyboard and then we update the state for specific keys. Get the keyboard layout, whether it's in United States or Hungarian or I don't know the names of the keyboard layouts. Forgive me. And then we are getting our name. Actually, we're registering space for the name. And then we're doing a little bit of Microsoft magic with bit shifting. And then we actually get the key name. This is where we do, like if you hit the backspace, it says backspace instead of just, what is it, character eight. And then we try to convert the key info into Unicode. We're doing Unicode because, well, Windows seven is all Unicode now. And then of course we print it out onto the screen and we're doing our key code, which is actually the byte number. So like tab is nine and the inner key is actually like, what is it, 12, 13, character turn line feed. And things like that. If you're on a Linux system, this obviously won't run. And then we take our buffer, cast it to a U short and then do a from UTF 16 into a Q string. Poof. Same thing with our name. And that's how we get our key output. And then last but certainly not least, we have to return a value of call next hook EX, which is a Windows API call. All in all, this is our tutorial. This is Brian. Thank you for watching. I hope you found this tutorial education entertaining and I have to apologize. It's been, oh my gosh, six plus months since I've done a tutorial. I've been so busy. Yeah, I posted a video saying back, the reasons why I haven't been keeping up with my website or feedback and life has just been crazy but I really wanna get back into tutorials. So this was my first attempt at getting back. Thank you for watching. I hope you found this educational and entertaining and if you, actually let me pause it and bring up my website super quick. You can always find this video out on my YouTube channel or on my website voidrealms.com where I have under tutorials, I have all the categories like cute and then I have them all categorized and you can click it and the accompanying source code will be with the tutorial. So have fun and happy coding.


Because you did that earlier and you know the phone booth. And so, all right, speaking to the mic. Speaking into the mic, I'm telling you things, things I'm telling you. Well, have you heard about the thing with the place and the person? Yeah, I heard about that one day. That one guy. The guy, you know what I'm talking about. The guy with the two ears. The two ears on the side of his face. That one time? All right, that's not gonna be okay though. Also, the guy with the nose in the middle of his house face. He doesn't have a nose in middle of his house. Are you hearing this too? Yeah, I'm not concerned about it. I don't think I, that's like when you're on the phone with someone and you hear yourself talking. That's obnoxious. I just had to double check. Right, well, I'm just, my brain's a little foggy, so I'm not sure I have much to add, but I'm Holy Spirit. Do you wanna pray? In the name of the Father, Son and Holy Spirit, amen. Lord, please inspire us. Ignite the Holy Spirit within us. Bring us closer to your kingdom. Lighten our thoughts and lighten our words. Lead us and guide us, take us by the hand so that we may serve your people and all the things that we do, especially in the stories that we are trying to relay in today's shows. Let it only bring honor and glory to you, less of us and more of you. You have this in your Holy Name, in the name of the Father, Son and Holy Spirit, amen. Saint Angel of the Cross and Saint Peter. Pray for us. Pray for us. Is it ready? Good to go. If you're watching this, we're testing out some new equipment. Are we live? Are we live? Yeah. Okay. We are live. As you can tell, we're a little... We're recording. Okay. We're blundered. You didn't tell us. We're trying to figure things out. We're all new to this, so it's fine. And... There's grace there, right? I don't have any announcement. Wait, wait, wait. Hey, if you're watching this, we're starting now because we had all that other stuff. Okay. Let's just get, let's just start. We weren't on the same page. That's my fault. Let's do five seconds of silence. Hey, guys. Thank you for tuning in. I have a correction that I need to make.  And I have said it before that I'm just a guy online who happens to have a beard. I am not an expert in any way, shape, or form. Somehow you got a mic. Somehow I got a mic. We don't know who gave that to you. And I totally made a mistake. And what's interesting is you may be thinking, what are you talking about? Because that show came out like, I don't know, three weeks ago or whatever it was. The timing of our episodes and how we record things is a little bit strange. Basically, I said that St. Paul was one of the 12. That's incorrect. And I just had one of those moments where I was talking and I spoke faster than I thought and it was just an issue.  It is very helpful. And it is actually really encouraging for me to know that we have people who are out there who don't blindly listen to us, but who will actually say, wait a minute, I don't think that's right. And then take the time out of your day to send us an email and say, hey, well, I'm very kind. They're all very kind. And it was like, hey, I don't know if you meant to say this, but I don't think this is, and like, you know, I checked out, I checked out some history and I'm not, I kind of get what you were. Like they were really trying. I felt so bad. They were like, yeah, they've been really generous. And it was like, no. Just slapped me in the face, right?  It's okay. We all need a dose of humility, humiliation, whatever you want to call it. We've said it before, we're not experts, and I'm certainly not an expert. That's why we have experts on the show. Yeah, and we will make mistakes and there'll be more in the future and it is what it is. So it's encouraging for me to, again, like I said, thanks to everybody who took the time to send an email and was very gracious and kind about it. It was actually, it was a very, kind of a heartwarming thing to experience, believe it or not. People care. Yeah, believe it or not. Positive thing. So that's the correction that I needed to issue. That being said, do you have any announcements? You said you don't have any announcements. I don't have any announcements, so. What about the firelight? Well, I guess this is going out way late. So the firelight retreats probably. I think we should just begin our show. I'm good with that. You ready? You ready? I don't know. I feel like that's tradition.  Yeah, and I just realized like the lights are not right. Who cares? Because you guys think that you get behind the scenes, but there's actually a behind the scenes behind the scenes. So maybe one day we could have someone actually present. You never know. Yeah, yeah. Oh, hey, I do have one announcement. We, with this new technology, we're gonna have the option to interact with you guys in a whole different way. At some point we are working on it. So if you'd be interested in maybe like a live Q&A show, you can shoot us an email. You can rate us five stars and leave a review and say, I would love a Q&A show or whatever. In Latin would be even better. We were talking about doing an entire show in Latin. Not really though. Sure, I was serious. I said it as a joke. Oh, I don't know a Latin. Okay, well anyway. So yeah, we'd really like to interact with you guys more and this new software will hopefully allow us to do that in kind of a different way and maybe not like a regular show, but like a offshoot Q&A show. So we'll figure it out. We're talking about stuff, seeing what's even feasible and plausible. And if people are interested. That being said, you ready to get into the show? Yes. I'm done rambling. I was gonna say, just kidding. Hey, I'm Jordan Burke. And I'm Kristen Priola. And this is Saints and Sages. Where we talk about the wisdom of the saints and how it's relevant for you. And boy howdy. Boy howdy. Do we have an interesting one today. We're starting off with an interesting one. Not technically a saint. But a saint. Not technically a sage. Sort of. It's about a saint. But it has a feast day. It involves a chair. It is a chair. We're talking about a chair today. Can anybody guess what it is? Chair of St. Peter. The chair of St. Peter. And it was funny, when we were looking at the calendar, you know, cause we pick out all these saints in advance, we both said like, oh, that sounds interesting. I didn't think about what that meant. And then I think when we both started doing research, we're like, oh. What is this? We're literally talking about a chair here. Not like actually St. Peter. It's a chair, a physical chair. A chair. Yeah, very interesting. If anybody's confused, let us explain. I kind of, I don't know. I don't know about you, but when I started going through this, I was like, this is one of, I think the more cool stories and kind of the fun little like trivia aspects of our faith that I don't think a lot of people know about. It's definitely divergent from our normal topics. Yeah. And I know when I posted about it on Instagram, we got some responses that were like, oh, I was there and I had no clue that that's what that was. And so I think that's really interesting too. A lot of people who have been to the Basilica, it is Basilica, right? Yeah, St. Peter. See now I'm second guessing everything. St. Peter's Basilica. You be you Jordan, it's okay, people will email us. You may, yeah, exactly. You may have seen it and not actually have known, which is kind of neat. So the chair of St. Peter, feast day is February 22nd, St. Peter established his throne in Rome. That's tough to say, say that five times. Which the church has actually only celebrated since the fourth century. So it might seem kind of funny, you know, to celebrate the church, the entirety of the church celebrates a day about a chair, but there's so much depth to why we celebrate the chair of St. Peter. So we recognize the actual authority of Jesus passed down to St. Peter and then onto his successors and then continues on generation after generation. And that's really what this feast day is about. It's not really about the chair. The chair is the symbol for the authority that was passed down. So the chair is the physical representation of that authority. That makes sense. Yes, it's a day, it signifies the teaching of the authority of the Pope. Yes, yep. Currently, and then all the way back to Jesus. So this is where it gets really interesting because there was a physical chair of Peter, it was a wooden chair. And it has like some metal rings on it, which was used to carry it and carry the Pope. And- It would slide poles through the metal rings before on the sides. It was very ornamented chair too. Correct, yeah. And you can find some pictures of it online. It's well, ornament compared to what it is now is very different, but I think for its time it was very respectable. Cathedral, by the way, Latin for chair. That's Cathedral. Speaking of chair plays into this and also Cathedral, like the chair of St. Peter and Bishop's chairs and cathedrals and so on and so forth. But this is what I found the most fascinating and this is what people were saying they didn't really realize while they were in the Basilica of St. Peter. The original wooden chair is actually encased and it's in the back. It's underneath a really famous stained glass window. Very beautiful view. It's in the apps. Yes. So we're in the back chamber of St. Peter's Basilica. So all the way in the back, you could see it when you're there, yeah, underneath that stained glass and depicts the Holy Spirit above, which is very famous. You guys probably know it. It is a gorgeous, it's not just the window too. It's what's surrounding the window. I mean, it's some of the most beautiful. Yeah, it's stunning. It's just stunning. So the actual chair was becoming damaged. Because of worms. Worms were eating it. And then also people were taking pieces of it for relics. I mean, it's pretty old. Yeah, it's super old. Super old. And I think there were even chunks that were taken out of it for, we're assuming the relics as well. It was struggling. Yeah. So Bernini eventually gets hired. And it's hired an artist. Yep, he gets hired to kind of create this chair of St. Peter's sculpture. And then later on, I don't remember which Pope it was, but he has it actually encased within the sculpture to protect it. So when you see the stained glass, you see the beautiful ornate around it. You see the four great doctors of the church, which Augustine Ambrose Christendom, is that how you pronounce it? I always mess that up. Anathanasius. You are actually holding up the chair. The actual physical wooden chair is encased in what you see there, and the chair that is being held up by. Yeah, so it's in there. Although you can't see the wood itself. It's got just bronze. Yeah. And it's very elaborate. Oh, and it is. It's one of the most beautiful sculptures I think I've ever seen, especially when you combine the fact that, as I said, you have four doctors of the church who are holding up the chair, which one of the things I love about Catholicism is everything is symbolic. Everything has purpose. And so those four doctors, those four doctors holding the chair, I even listened to a homily where they talked about like the height of the chair is at a specific height. So it involves all this other symbolism. And it's just, that's absolutely incredible.  And having that confidence in the church that we know that the Pope originally has been, he has been succeeded through like generation after generation from Jesus himself. And that's how we can trust the authority of the church is because it has started with Jesus himself. And this chair, which kind of seems funny. Like you might be like, why are we talking about a chair? I don't understand. But there's so much, like you said, symbolism behind the meaning of the authority that comes from his chair. And if you think about a chair, like there's always, it seems like a representation of something greater when you have like a chair that's placed in centrally in the church.   And so yeah, St. Peter's, St. Peter was established through this cathedral, Petri, which is Latin for chair of Peter. And as you mentioned, the cathedral, which literally means the established seat of the bishop. Yeah, the chair of the bishop. And so it's placed in the mother church of a diocese, which for this reason, that's why we call it the cathedral. And it's the symbol of the bishop's authority. And in particular his magisterium. And that is the evangelical, evangelical, oh my goodness, evangelical teaching, which as a successor of the apostles, he is called to safeguard and to transmit to the Christian community. Like this is a big deal that every single time we have a pope who has been given the keys, the authority established for Jesus given to St. Peter. And then every pope following, I mean, that's a big deal. It's a really, really neat. And it's just, you know, it reminds me as you were saying that of one of the reasons I originally converted.  It's like, who is leading you? I don't want some personally, I don't want some spinoff. I want the guy who was laid hands on by the guy who was laid hands on by the guy, back, back, back, back to Peter, who was established by Jesus. God himself. Like, how do you argue with that? I know. It's one of those things that you think about. Why argue? And you're like, I don't, you know, because I heard that prior to becoming Catholic. And I thought, oh, okay, that's it for me. Right. We're not following. It's pretty simple. Someone who followed the follower. We're following the follower, the leader himself. Yeah. There's, it's apostolic succession. It is the direct line from Christ himself, from Christ himself. Like, and it's almost, there's such a beauty to that when you really think about it. Like Christ laid hand, like Peter, Peter to hit next, to the next, to the next, to the next, to the next, to the priests and bishops that we have today, all follow that line. And they represent the mission that Christ himself entrusted to us to lead and tend the flock. What a phenomenal role that our Lord and Savior has given to us as humans. Yeah. And imagine, okay, so guys, think about if St. Peter had said no. Yeah. Like, where would we be today? Imagine if St. Peter was like, you know what, I don't know if I could do that word and just wasn't courageous and then denied the keys. He's like, no, thank you. I don't want to do it. Oh my gosh, like, where would we be today? We wouldn't have the church as we know it. Yeah. Yeah. So thank you to St. Peter for being brave and like taking that authority on because that's a big deal. You know what? I just thought of something, something else really interesting that I read when I was going through all this. Jesus often sat to teach. And so that's another symbolism involved with the chair. He did? Yeah. According to a priest, I don't know. He sat at Holy. I mean, like, I guess if you think about scripture, he's like sitting in a boat or on the field on a rock. Hey, listen, people feel free to fact check us on that as well. Who did the Gospels? Check it out. So, all right, that's the history of the chair. It's really simple. It's really simple. It's really interesting. What does it mean to you and I and to the listeners? Well, first I just want to read the actual scripture where this comes about because when you think about Peter receiving the keys to the kingdom, like, where does this initial conversation start? And this is Jesus to Simon at Caesarea Philippi.  And upon this rock, I will build my church and the gates of the nether world shall not prevail against it. I will give you the keys to the kingdom of heaven. Whatever you bind on earth shall be bound in heaven. And whatever you loose on earth shall be loosed in heaven. Matthew 16, 18 through 19. And I don't know about you, but that's pretty straightforward. And I love it when scripture is this blunt. Like I'm giving you the keys and anything that you bind on earth is going to be bound in heaven. And anything you loose will be loosed. That's a lot of authority that the Lord has given Peter. And very, very clear. And I want to follow that. That gives me a lot of hope. And similar to when I was coming back to the church, I had a lot of questions. I was very uncertain. I didn't even understand half of what the church was teaching. But because there was authority that came from the pope, I felt like I could have more confidence in everything that was established. The tradition of the church, even when man errors, even when the pope errors, it's not him himself. Like it's Jesus in him and through him. And that's the kind of authority that I want to follow, right? Meaning that there's a built-in protection. And let's continue with that thought because you're hitting something really important. What does happen when there's error? Well, we can look at what's going on outside of the church. You go to, I'm not gonna pick on any particular, anything outside of Catholicism, but where are they interpreting their scripture from? Most of it is self-interpretation, right? It can lead to a lot of error and much division as well. Well, how scary is that when you think about that? Some dude somewhere, I mean, we live in the South. So there's a church on every corner. So it's kind of, I think a little bit more real. Yeah, I think it's a little bit more real for us. I'm sure other people who are listening and may have experienced it. There's a church on every corner. And a lot of it is self-established. Yeah, non-Catholic, self-established.  And he could, but he might get some things right. But why would you risk that versus what you just said, which is we have the history and the tradition proven. I mean, undeniable. You can have issues with the policies and you can have issues with all sorts of things. It is undeniable, the apostolic succession, right? This is historical fact outside of religion. This is historical fact, right? That is your safety net. That is what says, it just echoes what you just said. Hey, what happens? What happens if someone gets it wrong? Well, they got it wrong. But the church remains, the tradition remains, the goodness remains, these things that were established over time. I don't know, I'm getting worked up, but it's a beautiful thing. Not me getting worked up, the church is a beautiful thing. It can cause a lot of confusion in the church and in people's hearts too, because they don't know who to follow or what to actually believe. And it's like, if you have this self-revelation, is this what the Bible's telling me? Am I supposed to do this? Am I supposed to jump off this cliff? I don't know. People wouldn't come up with anything. What does my dad always say? Humans have an infinite capacity for self-delusion. Yeah, we're pretty foolish.  Really? I don't know, dude. I don't think that's right. And really, it ultimately leads to corrupt versions of Christianity, which is not the truth itself. And so the authority of the church, we're watered down, just not straight truth. Happy, happy, joy, joy. Clappy, clappy. Sure, that too. Yikes. It's a movement. And by the way, I'm not, when I say these things, I hope they don't come across as judgmental. It's not, it actually makes me sad because as we've spoken up before, I had actually stepped away from the church you have as well. We both reverted. Yeah, very much so. And I was going to a happy, happy, joy, joy, feel-good church. I was like leading on stage, happy, happy, joy. Yeah. And when you, I'm not going to speak for both of us, but I know for me, when I look back, it's like I feel bad for them because all it is for them is feelings. And there's no- So much emotion. And not everybody, again, no general statements, but in general, I know I just said no general statements. It's hard to word these things, but there's just not the depth and the truth there. There's a community element that I think gives people a lot of hope there. And that's what drew me in was just, yeah, it kind of just felt right. Like people really cared about me and it was social. And I really enjoyed being a part of a non-denominational church. But I was looking for more. And that was in the, I found Jesus in the Catholic church, which is funny because I originally started as Catholic, but anyway, which kind of brings me to my next point about the chair of St. Peter being very unifying. And I love that our church is universal. One holy apostolic Catholic church. We say this every time we say the creed in church. And if you just pause and think about what this actually means, it's profound. Like you guys, we are one mystical body of Christ. This unifies us with not only the Pope that we have now, but every single Pope following and back to St. Peter and Jesus himself, the saints in heaven who are with us, for us, and praying with us now as we speak. We're all united as one body that never ends. Like that transcends time and space. And that kind of unity gives me so much like joy and faith knowing that the Roman Catholic church is the way. That universality that is just, it's not penetrable. Like this is never ending. That's it. I was about to say it and you said it. It's never ending. It will persist. Yeah, everlasting. We have, I think you hit something that's really important. A lot of people right now have doubts and they have fears and misunderstandings and anxieties and all these different things. What's gonna happen with the church? I saw a bishop say this. I saw a priest say this. What is- Who do I believe? The question I've heard it a couple of times now and it's one of those, it's like nails on chalkboard every time. I don't know if I can stay in the faith. It's like, you don't leave Jesus because of Judas. And I know that's a really rundown and played out saying, but it's so true. You don't leave the faith because of a bad priest or a bad bishop or whatever. Which can be so hard to reconcile. I get that y'all. Like if you are suffering because of a bad priest, I get your reasoning behind wanting to exit. I exited. Like I left the church. So I totally understand that like, like fully my heart goes out to you, but like remain, remain, remain, remain and find truth from like God himself and rely on the true teachings of the Catholic Church and not what people do because people are human. Even the Pope is human and we are sinful and we're always going to have that just yuckiness within the church, the body, because we're human. And we're broken. We're broken. And we're wounded. And that's never going to stop. And so if that's what we're building our foundation on with our faith, then we need to have like a heart check and go back to the basics and be like fundamentally, why am I Catholic? And like really ponder that in your heart and ask the Lord like, why am I here? Like, why am I doing this? Am I doing this because I'm hanging out with my friends in college and like that's the only reason why I'm really actually going to Mass because it's kind of like a social thing for me. Or am I doing this because I believe that Jesus's body, blood, soul and divinity like in the Eucharist, in the blood, like that's Jesus. And he calls me to him. He calls me every single day. And there's nothing we can escape from that. Like that reality exists and you can't run from it.  Even if you give up, I gave up if you know what I mean. Like I left, but he's still sought after me and he's always gonna seek after you.   Like whatever the reason is, like the Lord is same now, stay forever and ever and ever. He's not gonna change.  I wish I had a reggae horn. What's a reggae horn? Broom, boom, boom, boom, boom. I can't believe I just did that on the radio. Wow, I apologize to everyone who had to listen to that. Jordan, you've got to explain yourself. What just happened? It's that horn you hear and it's like when you like someone knocks it out of the park or there's like a mic drop moment.   What just happened? Wow. Well, honestly, I can't even roll tired. So come Holy Spirit one minute. Well, you're dropping some Holy Spirit fire for sure. Tell us more, Jordan. Is there anything else you wanna share about the chair of St. Peter? I don't think so. I think, you know, I'm just struck by the beauty of the symbolism. I think it's one of the most unique ways that we have everything. A lot of, you know, there's a lot of symbolism, but there's a lot of things that are very literal. And I think this is one of the more unique and beautiful things that we have that kind of crosses both of those lines. The spiritual and the physical element. Yeah, for the literal representation and the symbolism of everything that, you know, we're talking about. And if you get a chance to go see it, I mean, I would love to go and check it out. I know that like they have ropes and stuff. You can jump those ropes. Don't listen to my advice. I just love how concrete the church is. Yeah. Like we have physical items like this represents St. Peter and his authority, like an actual chair. And he may or may not have sat on it. We don't, you know, they're basically, and just to touch on that real quick, the historians have said there's no reason to believe that he didn't actually sit in the chair. However, we recognize that there is a possibility that he didn't sit in the chair. Which is totally fine. It doesn't matter. It doesn't. No, it doesn't matter. So anyway, I think it's awesome. I actually really enjoyed this episode. I'm really, I'm kind of hoping that we've come across something else that's similar to this because I think it's really unique and it's a really cool way to dive into the faith. Yeah, I mean. The church has so much depth like this. So St. Peter. St. Peter. Pray for us. Pray for us. And I forgot to say this. If you're interested in conversing with us, you can email us at saintspodatmyavala.com. Yeah. Poor corrections, which is what they would use that for. Poor corrections. Poor corrections. If you have questions for Jordan, not me, but only Jordan. I will give you wrong answers. Actually, if you want to play a game and if you want to ask me a question and just get a random response that will probably be entirely not accurate, we can do that as well. We will also take your suggestions, ideas. Anything, really. Yep. And hopefully we'll be doing some more interactive stuff here in the future. So pray for that and help us. Pray for our discernment and that. Please. I know that we're praying for you. Yep. That being said, we already said pray for us, so I guess we just say bye.  Bye. Bye. Jordan.